AWS Glue Catalog API:不同结构的元数据中的参数字段

AWS Glue Catalog API: Parameters field in metadata of different structures

AWS Glue 数据目录由不同的结构组成,例如 Database, Table, Partition, Column etc. Haven't looked through every one of them, but it seems that Parameters fields (a map array of key-value pairs) is present in all of them. I have noticed that if table was created by a crawler 然后我们可以看到类似的东西:

{
    "CrawlerSchemaDeserializerVersion": "1.0",
    "CrawlerSchemaSerializerVersion": "1.0",
    "UPDATED_BY_CRAWLER": "some-crawler-name",
    "averageRecordSize": "12",
    "classification": "parquet",
    "compressionType": "none",
    "objectCount": "123",
    "recordCount": "1234567",
    "sizeKey": "1234567890",
    "typeOfData": "file"
}

对于 Table["Parameters"] 以及 Table["StorageDescriptor"]["Parameters"]。如果我们的 table 有分区,那么每个分区都会有相同的字典,但 averageRecordSizeobjectCount 的值不同, recordCountsizeKey。将它们相加后,我们得到与 Table["Parameters"] 中相同的值。所有这些都是有道理的,我想这些值决定了爬虫的逻辑,当我们想要按需或按计划重新运行它时。

我没有使用爬虫,而是使用 boto3 and airflow 手动管理多个 AWS Glue 目录。例如,我可以将目录 12345 中的 db_1.table_1 中的分区定义复制到目录 6789 中的 db_2.table_2 中,或者定义其他table_1 中的元参数。但是,这个 Parameters 字段对我来说仍然是个谜,我找不到任何类型的相关文档。

它看起来像一些键,例如recordCount,保留供 AWS Glue 内部使用(尽管可以手动定义)。

  1. 其他服务(尤其是 Athena)是否也使用它们?
  2. 我在哪里可以找到此类键的列表及其含义,这样我的键就不会受到干扰?
  3. 文档提到这些键值对定义了与 table 关联的属性和一些限制:

    1. Each key is a Key string, not less than 1 or more than 255 bytes long, matching the Single-line string pattern.
    2. Each value is a UTF-8 string, not more than 512000 bytes long.

    Parameters字段可以包含多少个key有限制吗?查询数据时,这些键值对的数量是否会影响性能?

  4. 保持 Parameters 字段与 table、分区及其存储描述符同步有多重要
  1. 是的,例如Redshift spectrum 使用它来优化查询计划 - https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_TABLE.html#r_CREATE_EXTERNAL_TABLE-parameters
  2. 遗憾的是,没有完整的文档解释所有 TBLPROPERTIES。

  3. 我认为它不会对性能产生负面影响。内部属性通常用于某些活动,例如crawled_by用于Glue,numRows用于Athena/Redshift,has_encrypted_data用于检查s3数据是否加密等。

  4. 保持同步很重要,因为这些属性用于有效地管理 table 和查询。某些属性,例如skip.header.line.count=2 可以跳过前两行,不会将其视为数据行。