我在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
答案是
调用时发生错误(InvalidInputException) GetPartitions操作:不支持的表达式'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是否能够处理包含连字符的分区的表达式?如果是这样,正确的语法是什么?
答案 0 :(得分:2)
由爬虫在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