小编Edg*_*gar的帖子

如何在DBT中选择bigquery表的最新分区而不扫描全表?

我试图从 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)

sql google-bigquery dbt

7
推荐指数
1
解决办法
3441
查看次数

如何从字符向量中删除第一个特定重复元素

我有一个路径步骤的向量,并且有一个特定的路径步骤,如果它重复,我想消除重复.

例如,

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.

regex r vector

3
推荐指数
1
解决办法
141
查看次数

标签 统计

dbt ×1

google-bigquery ×1

r ×1

regex ×1

sql ×1

vector ×1