Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调整动态bqsql的性能_Sql_Google Bigquery - Fatal编程技术网

调整动态bqsql的性能

调整动态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个属性的示例。在我们的实时情

在我们有这两个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,它满足上述要求,运行速度更快

我提到


已经有了一个非常好的方法,它描述了优化查询性能的方法。让我知道你是否清楚。
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;