infer_storage_schema 插件

使用 “版本 ”下拉列表切换服务。 了解有关导航的详细信息
适用于:✅ Azure Data Explorer

此插件推断外部数据的架构,并以 CSL 架构字符串的形式返回该架构。 当创建外部表时,可以使用该字符串。 该插件通过 evaluate 运算符调用。

身份验证和授权

在请求属性中,指定要access的storage连接字符串。 每个storage connection string指定用于storage access的授权方法。 根据授权方法,可能需要向主体授予对外部storage的权限才能执行架构推理。

下表列出了受支持的身份验证方法和storage类型所需的任何权限。

身份验证方法 Azure Blob Storage/Data Lake Storage Gen2 Data Lake Storage Gen1
Impersonation Storage Blob 数据读取器 读取器
Managed Identity Storage Blob 数据读取器 读取器
共享Access令牌 列出 + 读取 Gen1 不支持此身份验证方法。
Microsoft Entra access token
Storage帐户access密钥 Gen1 不支持此身份验证方法。

语法

evaluate infer_storage_schema( 选项)

详细了解语法约定

参数

客户 类型 必需 说明
选项 dynamic ✔️ 一个用于指定请求属性的属性包。

请求的受支持的属性

客户 类型 必需 说明
StorageContainers dynamic ✔️ storage连接字符串数组,表示存储数据artifacts的前缀 URI。
DataFormat string ✔️ 受支持的数据格式之一。
FileExtension string 如果指定,则函数仅扫描以此文件扩展名结尾的文件。 指定扩展名可以加快进程或避免数据读取问题。
FileNamePrefix string 如果指定,则函数仅扫描以此前缀开头的文件。 指定前缀可以加快进程。
模式 string 架构推理策略。 值:anylastall。 此函数分别从找到的第一个文件、最后写入的文件或者从所有文件来推断数据架构。 默认值为 last
InferenceOptions dynamic 更多推理选项。 有效选项:UseFirstRowAsHeader(对于带分隔符的文件格式)。 例如,'InferenceOptions': {'UseFirstRowAsHeader': true}

返回

infer_storage_schema 插件返回一个结果表,其中包含一个保留了 CSL 架构字符串的行/列。

注意

  • 除了 Read,Storage容器 URI 密钥还必须具有 List 的权限。
  • 架构推理策略“all”是非常“昂贵的”作,因为它意味着从 all artifacts 找到并合并其架构。
  • 由于错误的类型推测(或者由于架构合并进程),有些返回的类型可能并不是实际的类型。 因此,在创建外部表之前,应该先仔细查看结果。

示例

let options = dynamic({
  'StorageContainers': [
    h@'https://storageaccount.blob.core.chinacloudapi.cn/MobileEvents;secretKey'
  ],
  'FileExtension': '.parquet',
  'FileNamePrefix': 'part-',
  'DataFormat': 'parquet'
});
evaluate infer_storage_schema(options)

输出

CslSchema
app_id:string、user_id:long、event_time:datetime、country:string、city:string、device_type:string、device_vendor:string、ad_network:string、campaign:string、site_id:string、event_type:string、event_name:string、organic:string、organic:string、days_from_install:int、revenue:real

在外部表定义中使用返回的架构:

.create external table MobileEvents(
    app_id:string, user_id:long, event_time:datetime, country:string, city:string, device_type:string, device_vendor:string, ad_network:string, campaign:string, site_id:string, event_type:string, event_name:string, organic:string, days_from_install:int, revenue:real
)
kind=blob
partition by (dt:datetime = bin(event_time, 1d), app:string = app_id)
pathformat = ('app=' app '/dt=' datetime_pattern('yyyyMMdd', dt))
dataformat = parquet
(
    h@'https://storageaccount.blob.core.chinacloudapi.cn/MovileEvents;secretKey'
)