从aws athena cli运行包含伪列的查询

问题描述 投票:1回答:1

参考以下帖子, How to get input file name as column in AWS Athena external tables

我尝试使用aws athena cli命令运行查询,如下所示,

aws athena start-query-execution --query-string "SELECT regexp_extract(\
"$path\", '[^/]+$') AS filename  FROM table" --query-execution-context '{"Database": "testdatabase"}' --result-configuration '{ "OutputLocation": "s3://<somevalidbucket>"}'

我总是使用$ path的空值来执行查询。例如,“SELECT regexp_extract('','[^ /] + $')AS filename ....”并且文件名在所有返回的行中显示为空。

注意:我在$ path周围用单引号替换双引号,结果没有改变。

相同的查询在AWS控制台上运行正常。我在这里错过了什么?

bash amazon-web-services command-line-interface amazon-athena
1个回答
2
投票

如果您正在运行Bash终端,并且可以将查询字符串括在单引号中,并使用'"'"'转义单引号:

如果将查询字符串括在单引号中:

$ aws athena start-query-execution --query-string 'SELECT regexp_extract("$path", '"'"'[^/]+$'"'"') FROM athena_test.some_table LIMIT 10' --query-execution-context '{"Database": "athena_test"}' --result-configuration '{ "OutputLocation": "s3://<SOMEBUCKET>"}'

如果将查询字符串括在双引号中:

$ aws athena start-query-execution --query-string "SELECT regexp_extract(\"\$path\", '[^/]+$') FROM athena_test.some_table LIMIT 10" --query-execution-context '{"Database": "athena_test"}' --result-configuration '{ "OutputLocation": "s3://<SOMEBUCKET>"}'

一个有用的技巧是查看Athena Web GUI中的历史记录,从中可以看到从命令行传递给Athena的确切内容。

enter image description here

看到:

How to escape single quotes within single quoted strings?

© www.soinside.com 2019 - 2024. All rights reserved.