盘区标记

盘区标记是一个字符串,用于描述盘区内所有数据共有的属性。 例如,在数据引入期间,可以追加盘区标记来表示引入数据的源。 然后,可以使用此标记进行分析。

盘区可以保留多个标记作为其元数据的一部分。 当盘区合并时,它们的标记也会合并,从而确保元数据表示形式一致。

要查看与盘区关联的标记,请使用 .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:bluedrop-by:redgreen
  • 盘区 2 具有以下标记:drop-by:redyellow
  • 盘区 3 具有以下标记:purpledrop-by:reddrop-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"]')

限制

  • 盘区标记只能应用于盘区内的记录。 因此,在将数据存储在盘区之前,不能对流式引入数据设置标记。
  • 盘区标记不能存储在外部表或具体化视图中的数据上。