infer_storage_schema 插件
适用于:✅Azure 数据资源管理器
此插件推断外部数据的架构,并以 CSL 架构字符串的形式返回该架构。 在创建外部表时可以使用该字符串。 该插件通过 evaluate
运算符调用。
身份验证和授权
在请求的属性中,指定要访问的存储连接字符串。 每个存储连接字符串都指定用于访问存储的授权方法。 根据授权方法,可能需要向主体授予对外部存储的权限才能执行架构推理。
下表按存储类型列出了支持的身份验证方法和任何所需的权限。
身份验证方法 | Azure Blob 存储/Data Lake Storage Gen2 | Data Lake Storage Gen1 |
---|---|---|
模拟 | 存储 Blob 数据读取者 | 读取器 |
共享访问 (SAS) 令牌 | 列出 + 读取 | Gen1 不支持此身份验证方法。 |
Microsoft Entra 访问令牌 | ||
存储帐户访问密钥 | Gen1 不支持此身份验证方法。 |
语法
evaluate
infer_storage_schema(
选项 )
详细了解语法约定。
参数
客户 | 类型 | 必需 | 说明 |
---|---|---|---|
选项 | dynamic |
✔️ | 一个用于指定请求属性的属性包。 |
请求的受支持的属性
名称 | 类型 | 必需 | 说明 |
---|---|---|---|
StorageContainers | dynamic |
✔️ | 存储连接字符串的数组,这些字符串表示存储的数据项目的前缀 URI。 |
DataFormat | string |
✔️ | 受支持的数据格式之一。 |
FileExtension | string |
如果指定,则函数仅扫描以此文件扩展名结尾的文件。 指定扩展名可以加快进程或避免数据读取问题。 | |
FileNamePrefix | string |
如果指定,则函数仅扫描以此前缀开头的文件。 指定前缀可以加快进程。 | |
模式 | string |
架构推理策略。 值:any 、last 、all 。 此函数分别从找到的第一个文件、最后写入的文件或者从所有文件来推断数据架构。 默认值为 last 。 |
|
InferenceOptions | dynamic |
更多推理选项。 有效选项:UseFirstRowAsHeader (对于带分隔符的文件格式)。 例如,'InferenceOptions': {'UseFirstRowAsHeader': true} 。 |
返回
infer_storage_schema
插件返回一个结果表,其中包含一个保留了 CSL 架构字符串的行/列。
注意
- 除了“读取”的权限外,存储容器 URI 密钥还必须具有“列表”的权限 。
- 架构推理策略“all”是非常“昂贵”的运算,因为它意味着要从所有找到的项目中读取并合并它们的架构。
- 由于错误的类型推测(或者由于架构合并进程),有些返回的类型可能并不是实际的类型。 因此,在创建外部表之前,应该先仔细查看结果。
示例
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, 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'
)