dbt redshift unload_table 宏数据库问题
dbt redshift unload_table macro database issue
尝试使用 dbt-redshift unload_table 宏。我正进入(状态
22:51:02 模型中的数据库错误 unload_test (models\unload_test.sql)
22:51:02 零长度定界标识符位于或接近“”””
22:51:02 LINE 1: /* {"app": "dbt", "dbt_version": "1.0.0", "profile_name": "d...
unload_test.sql 如下:
{{
config({
"materialized":"table",
"post-hook": [
"{{ redshift.unload_table(test_ods,
user,
s3_path='s3:/cj-pilot-test',
iam_role='default',
header='True',
delimiter=',') }}"
]
})
}}
select *
from test_ods.user
任何有关如何调试或解决此问题的帮助或提示都将不胜感激。
运行 dbt=1.0.0 和包
packages:
- package: dbt-labs/dbt_utils
version: [">=0.8.0", "<0.9.0"]
- package: dbt-labs/redshift
version: 0.6.0
我以前没有使用过unload_table宏,但一看,你的论点可能格式不正确。
架构的前两个参数和 table 应作为字符串文字传递。因此,对于您的示例,test_ods 架构应使用单引号传递:'test_ods'.
一个通用示例:
{{ redshift.unload_table('some_schema_name',
'some_table_name',
s3_path='s3://some-bucket-name',
iam_role='arn_for_some_role',
header=True,
delimiter=',') }}
双花括号内的代码被解释为Python代码,如果不带引号传递test_ods,它将被解释为对python变量的引用,不存在。
或者,如果您想将 当前 模型的架构和 table 作为参数传递,您可以通过传递 this.schema 来引用它们,或者this.table(不带引号)。 this 是一个 in-scope python object,其中包含有关当前正在执行的目标模型的属性。
{{ redshift.unload_table(this.schema,
this.table,
s3_path='s3://some-bucket-name',
iam_role='arn_for_some_role',
header=True,
delimiter=',') }}
您的其他一些论点可能还需要一些调整。例如,header 参数作为字符串文字传递,技术上应该是布尔值 True。 Redshift 可能会在幕后将其强制转换为布尔值,但这只是需要观察的东西。此外,您的 S3 存储桶地址可能需要有两个正斜杠而不是一个:s3://
这是一个 link 文档,描述了 unload_table 宏期望的数据类型:
https://github.com/dbt-labs/redshift/tree/0.2.3/#unload_table-source
调试此类问题的一个好方法是查看正在执行的 SQL。当您查看代码的呈现方式时,通常会更明显地看出代码的哪一部分可能会导致问题。日志通常是查看已执行 SQL 的最佳位置。这是一个关于查找位置的有用页面:https://docs.getdbt.com/faqs/checking-logs
希望这对您有所帮助,祝您解决问题顺利。
尝试使用 dbt-redshift unload_table 宏。我正进入(状态 22:51:02 模型中的数据库错误 unload_test (models\unload_test.sql) 22:51:02 零长度定界标识符位于或接近“””” 22:51:02 LINE 1: /* {"app": "dbt", "dbt_version": "1.0.0", "profile_name": "d...
unload_test.sql 如下:
{{
config({
"materialized":"table",
"post-hook": [
"{{ redshift.unload_table(test_ods,
user,
s3_path='s3:/cj-pilot-test',
iam_role='default',
header='True',
delimiter=',') }}"
]
})
}}
select *
from test_ods.user
任何有关如何调试或解决此问题的帮助或提示都将不胜感激。
运行 dbt=1.0.0 和包
packages:
- package: dbt-labs/dbt_utils
version: [">=0.8.0", "<0.9.0"]
- package: dbt-labs/redshift
version: 0.6.0
我以前没有使用过unload_table宏,但一看,你的论点可能格式不正确。
架构的前两个参数和 table 应作为字符串文字传递。因此,对于您的示例,test_ods 架构应使用单引号传递:'test_ods'.
一个通用示例:
{{ redshift.unload_table('some_schema_name',
'some_table_name',
s3_path='s3://some-bucket-name',
iam_role='arn_for_some_role',
header=True,
delimiter=',') }}
双花括号内的代码被解释为Python代码,如果不带引号传递test_ods,它将被解释为对python变量的引用,不存在。
或者,如果您想将 当前 模型的架构和 table 作为参数传递,您可以通过传递 this.schema 来引用它们,或者this.table(不带引号)。 this 是一个 in-scope python object,其中包含有关当前正在执行的目标模型的属性。
{{ redshift.unload_table(this.schema,
this.table,
s3_path='s3://some-bucket-name',
iam_role='arn_for_some_role',
header=True,
delimiter=',') }}
您的其他一些论点可能还需要一些调整。例如,header 参数作为字符串文字传递,技术上应该是布尔值 True。 Redshift 可能会在幕后将其强制转换为布尔值,但这只是需要观察的东西。此外,您的 S3 存储桶地址可能需要有两个正斜杠而不是一个:s3://
这是一个 link 文档,描述了 unload_table 宏期望的数据类型: https://github.com/dbt-labs/redshift/tree/0.2.3/#unload_table-source
调试此类问题的一个好方法是查看正在执行的 SQL。当您查看代码的呈现方式时,通常会更明显地看出代码的哪一部分可能会导致问题。日志通常是查看已执行 SQL 的最佳位置。这是一个关于查找位置的有用页面:https://docs.getdbt.com/faqs/checking-logs
希望这对您有所帮助,祝您解决问题顺利。