AWS Glue 目录 API:不同结构的元数据中的参数字段
Posted
技术标签:
【中文标题】AWS Glue 目录 API:不同结构的元数据中的参数字段【英文标题】:AWS Glue Catalog API: Parameters field in metadata of different structures 【发布时间】:2019-09-26 13:12:13 【问题描述】:AWS Glue 数据目录由不同的结构组成,例如
Database,
Table,
Partition,
Column 等。还没有仔细查看它们中的每一个,但似乎Parameters
字段(键值对的映射数组)存在于所有这些字段中。我注意到,如果表是由 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"]
。如果我们的表有分区,那么每个分区都有相同的字典,但 averageRecordSize、objectCount、recordCount、recordCount 的值不同强>大小键。将它们相加后,我们最终得到与Table["Parameters"]
相同的值。所有这些都是有道理的,我猜这些值决定了我们想要按需或按计划重新运行爬虫的逻辑。
我没有使用爬虫,而是使用 boto3 和 airflow 手动管理多个 AWS Glue 目录。例如,我可以将目录 12345 中db_1.table_1
中的分区定义复制到目录6789 中的db_2.table_2
中,或者在table_1
中定义其他元参数。但是,这个 Parameters 字段对我来说仍然是一个谜,我找不到任何与它相关的文档。
它看起来像一些键,例如recordCount
,保留供 AWS Glue 内部使用(尽管可以手动定义)。
-
其他服务(尤其是 Athena)是否也使用它们?
在哪里可以找到此类键及其含义的列表,以免我的键干扰?
文档提到这些键值对定义了与表关联的属性和一些限制:
每个密钥都是一个密钥字符串,长度不少于 1 或超过 255 个字节,与单行字符串模式匹配。 每个值都是一个 UTF-8 字符串,长度不超过 512000 字节。
Parameters
字段可以包含多少个键有任何限制吗?当您查询数据时,这些键值对的数量是否会影响性能?
Parameters
字段与表、分区及其存储描述符同步是多么重要
【问题讨论】:
【参考方案1】:-
是的,例如Redshift 频谱使用它来优化查询计划 - https://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_EXTERNAL_TABLE.html#r_CREATE_EXTERNAL_TABLE-parameters
很遗憾,没有完整的文档解释所有 TBLPROPERTIES。
但您可能在上面的 Rdshift Spectrum 链接中发现很少。 您可以在 athena 中运行以下 sql 查询以获取用于给定表的 TBLPROPERTIES:SHOW TBLPROPERTIES <table_name>
您也可以查看 HIVE 文档,因为 presto 是基于 HIVE - https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-ManagedandExternalTables 的。请注意,并非所有属性都适用于 Athena。
我认为它不会对性能产生负面影响。内部属性通常用于某些活动,例如crawled_by
被 Glue 使用,numRows
被 Athena/Redshift 使用,has_encrypted_data
用于检查 s3 数据是否加密等等。
skip.header.line.count=2
可以跳过前两行,不会被视为数据行。
【讨论】:
如果打算通过 Athena 中的 DDL 创建表。但是,要到达那里,我们首先手动创建了一个爬虫,然后在 Athena 中运行“生成表 DDL”并复制 DDL 以通过 Athena 中的 DDL 创建表......我假设我们不需要这些属性? “CrawlerSchemaDeserializerVersion”:“1.0”,“CrawlerSchemaSerializerVersion”:“1.0”,“UPDATED_BY_CRAWLER”:“some-crawler-name”,“averageRecordSize”:“12”,“UpdatedByJobRun”:“some-crawler-jobid”以上是关于AWS Glue 目录 API:不同结构的元数据中的参数字段的主要内容,如果未能解决你的问题,请参考以下文章
Apache Hudi在AWS Glue和AWS EMR上同步元数据的异同