盘区标记
适用于:✅Azure 数据资源管理器
盘区标记是一个字符串,用于描述盘区内所有数据共有的属性。 例如,在数据引入期间,可以追加盘区标记来表示引入数据的源。 然后,可以使用此标记进行分析。
盘区可以保留多个标记作为其元数据的一部分。 当盘区合并时,它们的标记也会合并,从而确保元数据表示形式一致。
要查看与盘区关联的标记,请使用 .show extents 命令。 有关与盘区内记录关联的标记的精细视图,请使用 extent-tags() 函数。
重要
以 drop-by:
或 ingest-by:
开头的标记具有特定含义。 有关详细信息,请参阅 drop-by 盘区标记和 ingest-by 盘区标记。
drop-by
盘区标记
以 drop-by:
前缀开头的标记可用于控制要合并的其他盘区。 具有相同的 drop-by:
标记集的盘区可合并在一起,但如果它们具有不同的 drop-by:
标记集,则无法与其他盘区合并。
注意
- 避免过多使用
drop-by
标记。 - 这些标记不应用于替换单个记录级数据,并且在应用于大量数据时最为有效。
- 将唯一的
drop-by
标记分配给单个记录或文件可能会显著影响性能。
示例
确定哪些盘区可合并在一起
如果:
- 盘区 1 具有以下标记:
drop-by:blue
、drop-by:red
、green
。 - 盘区 2 具有以下标记:
drop-by:red
、yellow
。 - 盘区 3 具有以下标记:
purple
、drop-by:red
、drop-by:blue
。
那么:
- 盘区 1 和 2 无法合并,因为它们有不同的
drop-by
标记集。 - 盘区 2 和 3 无法合并,因为它们有不同的
drop-by
标记集。 - 盘区 1 和 3 可以合并,因为它们有相同的
drop-by
标记集。
将 drop-by
标记作为盘区级别操作的一部分
以下查询可根据其 drop-by:
标记发出删除盘区的命令。
.ingest ... with @'{"tags":"[\"drop-by:2016-02-17\"]"}'
.drop extents <| .show table MyTable extents where tags has "drop-by:2016-02-17"
ingest-by
盘区标记
带有 ingest-by:
前缀的标记可与 ingestIfNotExists
属性一起使用,以确保仅引入数据一次。
属性 ingestIfNotExists
可通过检查具有指定 ingest-by:
标记的盘区是否已存在来防止重复引入。 通常,引入命令包含 ingest-by:
标记以及具有相同值的 ingestIfNotExists
属性。
注意
- 避免过多使用
ingest-by
标记。 - 为每个引入调用分配唯一的
ingest-by
标记可能会显著影响性能。 - 如果已知管道具有数据重复项,我们建议在引入数据前解决这些重复项。
示例
在引入时添加标记
以下命令可引入数据并添加标记 ingest-by:2016-02-17
。
.ingest ... with (tags = '["ingest-by:2016-02-17"]')
防止重复引入
以下命令可引入数据,前提是表中没有盘区具有 ingest-by:2016-02-17
标记。
.ingest ... with (ingestIfNotExists = '["2016-02-17"]')
防止重复引入并将标记添加到任何新数据
以下命令可引入数据,前提是表中没有盘区具有 ingest-by:2016-02-17
标记。 任何新引入的数据将会获取 ingest-by:2016-02-17
标记。
.ingest ... with (ingestIfNotExists = '["2016-02-17"]', tags = '["ingest-by:2016-02-17"]')
限制
- 盘区标记只能应用于盘区内的记录。 因此,在将数据存储在盘区之前,不能对流式引入数据设置标记。
- 盘区标记不能存储在外部表或具体化视图中的数据上。