【发布时间】:2020-01-16 14:08:32
【问题描述】:
目前,我正在努力在 Google Big Query 中创建快速优化的查询。
假设,有一个表,有 10k 行和 4k 列:
| TP_001_A | TP_001_B | TP_002_A | TP_002 | ... | TP_099_B |
----+----------+----------+----------+----------+----------+----------+
1 | 0.33 | 0.33 | 0.33 | 0.33 | 0.33 | 0.37 |
2 | 0.33 | 0.33 | 0.31 | 0.33 | 0.33 | 0.33 |
3 | 0.33 | 0.33 | 0.33 | 0.33 | 0.33 | 0.33 |
4 | 0.35 | 0.33 | 0.33 | 0.33 | 0.34 | 0.33 |
...
9999| 0.33 | 0.33 | 0.33 | 0.33 | 0.33 | 0.33 |
我的任务是根据正则表达式过滤器选择列(例如,只有名称以 TP_001 开头的列),从而生成这样的表:
| TP_001_A | TP_001_B |
----+----------+----------+
1 | 0.33 | 0.33 |
2 | 0.33 | 0.33 |
3 | 0.33 | 0.33 |
4 | 0.35 | 0.33 |
...
9999| 0.33 | 0.33 |
到目前为止,我已经解决了这个问题并查询了整个表,然后使用 pandas 库对其进行过滤,这很慢,因为在大表中下载时间和整体 pandas 很慢。
在网上搜索后,我发现列名可以通过如下查询来检索:
SELECT column_name
FROM my_view.INFORMATION_SCHEMA.COLUMNS
WHERE table_name="my_table"
我可以在哪里使用 REGEXP_EXTRACT_ALL 函数,并过滤正确的列名,但它给了我很难在主查询中使用的单独表。
但是这个解决方案有一个问题:尽管速度非常快,但正在处理大量数据(指示显示 10MB,但看起来很多)。
是否有任何适当的方式来进行此类查询或其他方式来优化仅检索过滤的列?
【问题讨论】:
-
如果您已经在使用 python,请查询 Information_SCHEMA,遍历结果并过滤以获取所需的列名,然后从这些结果中构建新的 select 语句,然后针对新字符串执行查询。
标签: python pandas performance google-bigquery