我试图从 BigQuery 表中选择最新的分区,而不在 DBT 模型中扫描整个表,以节省查询成本。
DBT 不允许在数据模型中使用分号,因此使用DECLARE+SET脚本语句不能按照此处的建议工作。
DBT 有一个 sql_header 宏,它允许在标头中设置一些变量,但该标头不接受对数据模型的引用,或者至少以下代码无法编译:
{{ config(
sql_header=" DECLARE latest_partition_date DATE;
DECLARE latest_load_timestamp TIMESTAMP;
SET latest_partition_date = (SELECT MAX(_PARTITIONDATE) FROM {{ ref("model") }} );
SET latest_load_timestamp = (SELECT MAX(loaded_at) FROM {{ ref("model") }} WHERE _PARTITIONDATE = latest_partition_date);"
) }}
-- set the main query
SELECT * FROM {{ ref("model") }}
WHERE
-- Select the latest partition to reduce 'Bytes processed' for loading the query.
_PARTITIONDATE = latest_partition_date
-- …Run Code Online (Sandbox Code Playgroud) 我有一个路径步骤的向量,并且有一个特定的路径步骤,如果它重复,我想消除重复.
例如,
my_vec = "A > A > X > B > X > X > X > C > C"
Run Code Online (Sandbox Code Playgroud)
现在如果'X'重复,那么除了第一个之外我想要消除X的所有重复,同时保留其余元素的顺序,这样我想要的结果是:
my_vec = "A > A > X > B > X > C > C",重复的X从中间消除.
我尝试使用for循环和if-else组合,这样我会检测向量中的前一个元素是否也包含'X',然后用NA替换元素,然后我可以删除NA项,但这种方法没有提供所需的结果.
我试着看这里和这里,但这些只是过滤掉了独特的元素,而我想对特定元素执行此操作.
这是我的代码:
my_vec <- unlist(str_split(my_vec, '>') )
for (i in length(my_vec)){
if (grepl('X', my_vec[i]) & grepl('X', my_vec[i-1])) {
steps[i] <- NA
} else {
next()
}}
my_new_vec <- str_c(steps, collapse = '>')
Run Code Online (Sandbox Code Playgroud)
但是,输出与输入完全相同,没有任何内容变为NA.