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

Running query containing pseudo column from aws athena cli

参考以下post、

我尝试 运行 使用 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 终端,您可以将查询字符串括在单引号中并使用 '"'"':

转义单引号

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

$ 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 的内容。

参见:

How to escape single quotes within single quoted strings?