我在 S3 中有按类别和日期分区的数据,如下所示:
s3://mybucket/category=1/date=2018-08-30/data1.json
s3://mybucket/category=1/date=2018-08-31/data2.json
s3://mybucket/category=2/date=2018-08-30/data3.json
s3://mybucket/category=2/date=2018-08-31/data4.json
运行爬网程序后,我的元数据表中有两个分区键:一个用于category
,另一个用于date
。我想使用 GetPartitions API 检索与某些键匹配的分区,因此我开始尝试使用 AWS CLI。如果我运行以下命令:
aws glue get-partitions --database-name mydb --table-name mytable --expression "category=1" --region us-west-2
我按预期成功检索分区。但是,我尝试了以下命令:
aws glue get-partitions --database-name mydb --table-name mytable --expression "category=1 AND date=2018-08-30" --region us-west-2
回应是
调用 获取分区操作:不支持的表达式"2018 - 08 - 30">
产生此错误的另一个命令是
aws glue get-partitions --database-name mydb --table-name mytable --expression category=1 AND date=2018-08-30 --region us-west-2
我还尝试使用以下命令修改调用:
aws glue get-partitions --database-name mydb --table-name mytable --expression "category=1 AND date=2018-08-30" --region us-west-2
这给了我错误
调用 GetPartitions 操作时出错(InvalidInputException(:第 1 行第 35 列出现词法错误。 遇到:"\" (92(,在 : " 之后
GetPartitions API 是否能够处理包含连字符的分区的表达式?如果是这样,正确的语法是什么?
最初由 AWS Glue 中的爬网程序生成的分区将在元数据目录中具有类型String
。虽然我的一些类别包含连字符,但它们位于 uuid 中(即category=so36-fkw1-...
(,所以它们没有被解释为表达式。另一方面,日期仅包含数字字符和-
这是问题的根源。我能够通过将日期括在单数引号中来修复它,如下所示:
aws glue get-partitions --database-name mydb --table-name mytable --expression category=1 AND date='2018-08-30' --region us-west-2