如何在 Azure 数据资源管理器中查找范围的分区元数据

问题描述 投票:0回答:1

请参阅此背景:Azure 数据资源管理器:分区策略和合并策略如何工作?

我创建了一个表,其分区策略基于字符串和时间戳列。使用此策略,我的查询的性能提升是巨大的:

  "PartitionKeys": [
    {
      "ColumnName": "sensor_id",
      "Kind": "Hash",
      "Properties": {
        "Function": "XxHash64",
        "MaxPartitionCount": 30,
        "Seed": 1,
        "PartitionAssignmentMode": "Uniform"
      }
    },
    {
      "ColumnName": "timestamp",
      "Kind": "UniformRange",
      "Properties": {
        "Reference": "1970-01-01T00:00:00",
        "RangeSize": "15.00:00:00",
        "OverrideCreationTime": true
      }
    }
  ],

使用

.show database extents partitioning statistics
我也确信我有 100% PartionedRowPercentage。 但是,在 15 天的时间内,我获得了 79 个范围,并且这些范围未接近合并和分片策略设置的最大大小。因此,我试图找到特定范围内的元数据。

我的第一个问题是是否有人知道显示一定范围的分区元数据的命令。

我的第二个问题是,当我运行以下查询时,每个传感器 ID 的输出差异很大,但特定范围内的每个sensor_id 不应该具有相同的 XxHash64 函数输出吗?

T
| where extent_id() == "e1ccecab-522c-48ce-801f-5b173add04e7"
| distinct sensor_id
| project sensor_id, hashed= hash_xxhash64(sensor_id, 30)
| sort by hashed asc  
azure metadata partitioning azure-data-explorer
1个回答
0
投票

我的第一个问题是是否有人知道显示某个范围的分区元数据的命令。

没有正式的方法来证明这一点(分区元数据格式也不是契约性的)。

也就是说,给定一个范围,您可以运行类似的命令来查看分区键值 - 如果该范围已分区,您应该获得一个分区键值。

TableName
| where extent_id() == '<some_guid>'
| summarize row_count = count()
  by 
    hash_partition_value = hash_xxhash64(<hash_partition_column_name>, <max_partition_count>),
    datetime_partition_value = bin_at(<datetime_partition_column_name>, <range_size>, <reference>)

<
>
中封装的所有变量都可以在您定义的策略中找到。

我的第二个问题是,当我运行以下查询时,每个传感器ID的输出有很大不同,但特定范围内的每个sensor_id不应该具有相同的XxHash64函数输出吗?

在分区范围中,对于范围分区所依据的参数,所有记录都属于同一个哈希/日期时间分区。即

hash_xxhash64(<hash_partition_column_name>, <max_partition_count>)
对于该范围内的所有记录应具有相同的值。

如果您看到不同的结果,则意味着范围未分区,或者根据您之前设置的不同策略进行分区(例如,检查您是否忘记修改当前策略的

EffectiveDateTime
,以重新分区之前-根据您设置的不同策略进行分区的分区范围)

© www.soinside.com 2019 - 2024. All rights reserved.