本文内容
适用于:✅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 |
Kusto 转发到 SQL 端点进行身份验证的 Microsoft Entra 访问令牌。 设置后,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 表列没有声明的大小限制。
在以下示例中,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