AWS Glue API无法识别带有连字符的分区

时间:2018-08-31 00:30:33

标签: amazon-web-services aws-cli aws-glue

我在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是否能够处理包含连字符的分区的表达式?如果是这样,正确的语法是什么?

1 个答案:

答案 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