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

Bash 从aws athena cli运行包含伪列的查询,bash,amazon-web-services,command-line-interface,amazon-athena,Bash,Amazon Web Services,Command Line Interface,Amazon Athena,关于下面的帖子, 我尝试使用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 '{ "OutputL

关于下面的帖子,

我尝试使用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>"}'
aws athena启动查询执行--query string“SELECT regexp\u extract(\ “$path\”,“[^/]+$”,作为表中的文件名”--查询执行上下文“{”数据库“:“testdatabase”}”--结果配置“{”输出位置“:“s3://”}” 我总是使用$path的空值执行查询。e、 例如,“选择regexp_extract(“”,[^/]+$)作为文件名…”,文件名在所有返回的行中显示为空

注意:我在$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>"}'
$aws athena start查询执行--query string'从athena_test中选择regexp_extract(“$path”,“““”[^/]+$”)。某些表限制10'--查询执行上下文“{”数据库“:“athena_test”}”--结果配置“{”OutputLocation:“s3://”}”
如果将查询字符串括在双引号中:

$ 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>"}'
$aws athena start查询执行--query string“SELECT regexp\u extract(\“\$path\”,“[^/]+$”)FROM athena\u test.some\u table LIMIT 10”--查询执行上下文“{”数据库“:“athena\u test”}”--结果配置“{”OutputLocation“:“s3://”}”
一个有用的技巧是查看Athena Web GUI中的历史记录,从它们的表单中,您可以确切地看到从命令行传递到Athena的内容

见:


查看您的查询后,我意识到我没有逃过$sign。现在可以了。