参考以下帖子,
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控制台上运行正常。我在这里缺少什么?
答案 0 :(得分: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的确切内容。
请参阅: