将数据导出到 SQL
适用于:✅Azure 数据资源管理器
“将数据导出到 SQL”可以运行查询并将其结果发送到 SQL 数据库(例如由 Azure SQL 数据库服务承载的 SQL 数据库)中的表。
权限
你必须至少具有表管理员权限才能运行此命令。
语法
.export
[async
] to
sql
sqlTableName sqlConnectionString [with
(
propertyName =
propertyValue [,
...])
] <|
query
详细了解语法约定。
参数
客户 | 类型 | 必需 | 说明 |
---|---|---|---|
async |
string |
如果指定此参数,命令将以异步方式运行。 | |
SqlTableName | string |
✔️ | 要将数据插入到的 SQL 数据库表的名称。 为了防范注入式攻击,此名称具有限制。 |
SqlConnectionString | string |
✔️ | SQL 终结点和数据库的连接字符串。 该字符串必须遵循 ADO.NET 连接字符串格式。 出于安全原因,连接字符串具有限制。 |
PropertyName、PropertyValue | string |
可选属性的列表。 |
支持的属性
名称 | 值 | 说明 |
---|---|---|
firetriggers |
true 或 false |
如果为 true ,则指示目标系统激发 SQL 表上定义的 INSERT 触发器。 默认为 false 。 有关详细信息,请参阅 BULK INSERT 和 System.Data.SqlClient.SqlBulkCopy。 |
createifnotexists |
true 或 false |
如果为 true ,则会在目标 SQL 表不存在的情况下创建该表;在这种情况下,必须提供 primarykey 属性来指示作为主键的结果列。 默认为 false 。 |
primarykey |
如果 createifnotexists 为 true ,则此属性指示结果中将用作 SQL 表主键的列的名称(如果该表是由此命令创建的)。 |
|
persistDetails |
bool |
指示此命令应保留其结果(请参阅 async 标志)。 在异步运行中默认为 true ,但如果调用方不需要结果,则可将其关闭。 在同步执行中默认为 false ,但可以开启。 |
token |
string |
Microsoft Entra 访问令牌,Kusto 将其转发到 SQL 终结点来进行身份验证。 设置后,SQL 连接字符串不应包含身份验证信息,如 Authentication 、User ID 或 Password 。 |
身份验证和授权
身份验证方法基于提供的连接字符串,访问 SQL 数据库所需的权限因身份验证方法而异。
将数据导出到 SQL 所支持的身份验证方法包括 Microsoft Entra 集成的(模拟)身份验证和用户名/密码身份验证。 如果使用模拟身份验证,则请确保主体对数据库拥有以下权限:
- 现有表:表 UPDATE 和 INSERT
- 新表:CREATE、UPDATE 和 INSERT
注意
在可能的情况下,首选的身份验证方法是 Microsoft Entra 集成(模拟)身份验证。
限制和局限
将数据导出到 SQL 数据库时存在一些限制和局限性:
Kusto 是一种云服务,因此,连接字符串必须指向可从云中访问的数据库。 (具体说来,无法导出到本地数据库,因为无法从公有云访问它。)
当调用方主体为 Microsoft Entra 主体(
aaduser=
或aadapp=
)时,Kusto 支持 Active Directory 集成身份验证。 另外,Kusto 还支持在连接字符串中提供 SQL 数据库的凭据。 不支持其他身份验证方法。 提供给 SQL 数据库的标识始终来自命令调用方,而不是来自 Kusto 服务标识本身。如果 SQL 数据库中的目标表存在,则它必须与查询结果架构匹配。 请注意,在某些情况下(例如,数据库为 Azure SQL 数据库),这意味着表中有一个列标记为标识列。
导出大量数据可能需要很长时间。 批量导入期间,建议在设置目标 SQL 表时尽量减少日志记录。 请参阅 SQL Server 数据库引擎 > ... > 数据库功能 > 批量导入和导出数据 。
数据导出是使用 SQL 大容量复制执行的,在目标 SQL 数据库上不提供事务性保证。 请参阅事务和批量复制操作。
SQL 表名称被限制为包含字母、数字、空格、下划线 (
_
)、点 (.
) 和连字符 (-
) 的名称。SQL 连接字符串限制如下:
Persist Security Info
显式设置为false
,Encrypt
设置为true
,Trust Server Certificate
设置为false
。创建新的 SQL 表时,可以指定列的主键属性。 如果列的类型为
string
,则 SQL 可能会因对主键列的其他限制而拒绝创建表。 解决方法是在导出数据前手动在 SQL 中创建表。 存在此限制的原因在于,SQL 中的主键列不能是无限大小,但 Kusto 表列没有已声明的大小限制。
Azure DB Microsoft Entra 集成身份验证文档
示例
在此示例中,Kusto 运行查询,然后将查询生成的第一个记录集导出到服务器 myserver
的 MyDatabase
数据库中的 MySqlTable
表。
.export async to sql MySqlTable
h@"Server=tcp:myserver.database.chinacloudapi.cn,1433;Authentication=Active Directory Integrated;Initial Catalog=MyDatabase;Connection Timeout=30;"
<| print Id="d3b68d12-cbd3-428b-807f-2c740f561989", Name="YSO4", DateOfBirth=datetime(2017-10-15)
在此示例中,Kusto 运行查询,然后将查询生成的第一个记录集导出到服务器 myserver
的 MyDatabase
数据库中的 MySqlTable
表。
如果目标表在目标数据库中不存在,则创建它。
.export async to sql ['dbo.MySqlTable']
h@"Server=tcp:myserver.database.chinacloudapi.cn,1433;Authentication=Active Directory Integrated;Initial Catalog=MyDatabase;Connection Timeout=30;"
with (createifnotexists="true", primarykey="Id")
<| print Message = "Hello World!", Timestamp = now(), Id=12345678