调整动态bqsql的性能
在我们有这两个BQ表的地方有一个要求 表A 表B 表A包含表中属性名称的as字段,而表B中这些是字段属性名称的值 我们应该在条件为的情况下将表_B与表_A左联接 TABLE_B.B_date=TABLE_A.A_date TABLE_B.property_name=TABLE_A.prop[1-n]的列名 TABLE_B.property_value=TABLE_A.prop[1-n] 预期产量 我们应该找到每个属性名称和属性值组合的数量和大小之和。 这只是一个具有3个属性的示例。在我们的实时情况下,这些物业的大小可能会有所不同,比如说200或250,或者每天可能是300。bqsql需要是动态的 此外,该o/p用于后续查询,因此我已将其加载到名为table_C的表中 我已经准备好了这个BQ SQL,完成282个属性的循环大约需要15分钟。 请您帮助微调此BQ SQL,它满足上述要求,运行速度更快 我提到调整动态bqsql的性能,sql,google-bigquery,Sql,Google Bigquery,在我们有这两个BQ表的地方有一个要求 表A 表B 表A包含表中属性名称的as字段,而表B中这些是字段属性名称的值 我们应该在条件为的情况下将表_B与表_A左联接 TABLE_B.B_date=TABLE_A.A_date TABLE_B.property_name=TABLE_A.prop[1-n]的列名 TABLE_B.property_value=TABLE_A.prop[1-n] 预期产量 我们应该找到每个属性名称和属性值组合的数量和大小之和。 这只是一个具有3个属性的示例。在我们的实时情
已经有了一个非常好的方法,它描述了优化查询性能的方法。让我知道你是否清楚。
A_date |acc_num|prop1|prop2|prop3 |size
6-Sep-2020|111 |Yes |1 |Active |1
6-Sep-2020|112 |No |1 |Registered|0
6-Sep-2020|113 |No |3 |Active |2
6-Sep-2020|114 |Yes |2 |Active |0
6-Sep-2020|115 |No |2 |Registered|1
6-Sep-2020|116 |Yes |3 |Active |1
6-Sep-2020|117 |Yes |1 |Registered|2
B_date |property_name|property_value
6-Sep-2020|prop1 |Yes
6-Sep-2020|prop1 |No
6-Sep-2020|prop2 |1
6-Sep-2020|prop2 |2
6-Sep-2020|prop2 |3
6-Sep-2020|prop3 |Active
6-Sep-2020|prop3 |Registered
date |property_name|property_value|Sum_size|Count
6-Sep-2020|prop1 |Yes |4 |4
6-Sep-2020|prop1 |No |3 |3
6-Sep-2020|prop2 |1 |3 |3
6-Sep-2020|prop2 |2 |1 |2
6-Sep-2020|prop2 |3 |3 |2
6-Sep-2020|prop3 |Active |4 |4
6-Sep-2020|prop3 |Registered |3 |3
DECLARE columns ARRAY<STRUCT<column_name STRING, property_name STRING>>;
DECLARE count_of_property, x INT64 DEFAULT 0;
SET columns = (
WITH all_columns AS (
SELECT column_name,format('"%s"',column_name) as property_name
FROM `project`.dataset.INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'TABLE_A' AND column_name in
(select distinct(LOWER(property_name))
from `project.dataset.TABLE_B`
)
)
SELECT ARRAY_AGG(STRUCT(column_name,property_name)
) AS columns
FROM all_date_columns
);
SET count_of_property = (
select count(*) from `project`.dataset.INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'TABLE_A' AND column_name in
(select distinct(LOWER(property_name))
from `project.dataset.TABLE_B`
));
CREATE OR REPLACE TABLE dataset.TABLE_C (
date DATE,
property_name STRING,
property_value STRING,
sum_size FLOAT64,
count INT64);
LOOP
IF x > count_of_property -1 THEN
LEAVE;
END IF;
EXECUTE IMMEDIATE format("""
INSERT INTO dataset.TABLE_C
SELECT
B_date as date,
%s AS property_name,
%s AS property_value,
sum(size) as sum_size
count(*) as count
FROM `project.dataset.TABLE_A`
group by 1,2,3
""", columns[OFFSET(x)].property_name,
columns[OFFSET(x)].column_name
);
SET x = x + 1;
END LOOP;