通过Terraform以编程方式创建AWS Athena视图

通过Terraform以编程方式创建AWS Athena视图,terraform,amazon-athena,Terraform,Amazon Athena,我正在尝试使用SQL创建Athena视图。 公平地说,我几乎做到了这一点 resource "null_resource" "views" { provisioner "local-exec" { ## success using file:// #command = "aws athena start-query-execution --query-string file://query11.sql --output json --query

我正在尝试使用SQL创建Athena视图。 公平地说,我几乎做到了这一点

resource "null_resource" "views" {
    provisioner     "local-exec" {

        ## success using file://
        #command = "aws athena start-query-execution --query-string file://query11.sql  --output json --query-execution-context Database=${aws_athena_database.metadb.id} --result-configuration OutputLocation=s3://xxxxxxx2"

        ## fails when using string
        command = "aws athena start-query-execution --query-string \"CREATE OR REPLACE VIEW query11 AS SELECT * FROM  meta.getresources_vw\" --output json --query-execution-context Database=${aws_athena_database.metadb.id} --result-configuration OutputLocation=s3://xxxxxxx2"
        }
}
在代码中,使用
文件
传递sql代码的
命令
行运行良好

但是,尝试将sql作为字符串传入的
命令
行失败

我尝试过用单引号、双引号来包装字符串;用反斜杠逃脱,而不是。。。。一切都没有改善

因此,使用字符串时的错误为:

null_resource.views:使用“本地执行器”进行设置。。。 null_resource.views(本地执行):执行:[“cmd”“/C”“aws athena” 开始查询执行--查询字符串\“创建或替换视图查询11 作为SELECT*FROM meta.getresources\u vw\“--输出json --查询执行上下文数据库=testbug--结果配置OutputLocation=s3://xxxxxxx 2“]null\u resource.views(本地执行): 用法:aws[选项][…] [parameters]null_resource.views(本地执行):要查看帮助文本,请 可以运行:

null_resource.views(本地执行):aws帮助null_resource.views (本地执行):aws帮助null_resource.views(本地执行):
aws帮助

null_resource.views(本地执行):未知选项:替换、查看、, query11,AS,SELECT,*,FROM,meta.getresources\u vw“,或

错误:运行命令“aws athena start query execution”时出错 --查询字符串“创建或替换视图query11作为SELECT*FROM meta.getresources\u vw”--输出json--查询执行上下文 Database=testbug——结果配置OutputLocation=s3://xxxxxxx 2': 退出状态255。输出:用法:aws[选项] […][parameters]要查看帮助文本,可以运行:

aws帮助aws帮助aws帮助

未知选项:替换、查看、查询11、作为、选择、*、从、, meta.getresources_vw”,或

有趣的是,如果我复制错误消息最后一部分中显示的命令,并直接粘贴到CLI中;它执行得很成功

aws athena start-query-execution --query-string "CREATE OR REPLACE VIEW query11 AS SELECT * FROM meta.getresources_vw" --output json --query-execution-context Database=testbug --result-configuration OutputLocation=s3://xxxxxxx2

你可以在下面的答案中找到一个例子:谢谢西奥。最后,我决定使用local_exec对于我的用例来说不够健壮。现在我将ddl上传到s3,并使用lambda对数据库进行同步和执行。