BigQuery 使用条件从其他表创建表(管理大量列)

2024-03-29

我面临与我的项目相关的问题。这是我想做的事情的摘要:

我有一个很大的每日文件(100 Go),其中包含以下摘录(无标题):

ID_A|segment_1
ID_A|segment_2
ID_B|segment_2
ID_B|segment_3
ID_B|segment_4
ID_B|segment_5
ID_C|segment_1
ID_D|segment_2
ID_D|segment_4

每个 ID(从 A 到 D)都可以链接到一个或多个段(从 1 到 5)。

我想处理此文件以获得以下结果(结果文件包含标头):

ID|segment_1|segment_2|segment_3|segment_4|segment_5
ID_A|1|1|0|0|0
ID_B|0|1|1|1|1
ID_C|1|0|0|0|0
ID_D|0|1|0|1|0

1表示ID包含在段中,0意味着事实并非如此。

我正在使用以下查询来获取结果:

select id,
       countif(segment = 'segment_1') as segment_1,
       countif(segment = 'segment_2') as segment_2,
       countif(segment = 'segment_3') as segment_3,
       countif(segment = 'segment_4') as segment_4,
       countif(segment = 'segment_5') as segment_5
from staging s cross join
     unnest(split(segments, ',')) as segment
group by id;

这个解决方案对我一直有效,直到段数变得更多(900+段,而不是我的第一个示例中的 5)。这正在创建一个巨大的查询,无法作为参数传递bq cli.

有什么我可以使用的解决方法吗?

感谢大家的帮助。

Regards


以下是 BigQuery 标准 SQL

EXECUTE IMMEDIATE '''
SELECT id, ''' || (
  SELECT STRING_AGG("COUNTIF(segment = '" || segment || "') AS " || segment ORDER BY segment)
  FROM (SELECT DISTINCT segment FROM staging)  
) || '''  
FROM staging
GROUP BY 1
ORDER BY 1
'''     

如果适用于您的问题中的样本数据 - 输出是

Row id      segment_1   segment_2   segment_3   segment_4   segment_5    
1   ID_A    1           1           0           0           0    
2   ID_B    0           1           1           1           1    
3   ID_C    1           0           0           0           0    
4   ID_D    0           1           0           1           0  

正如您所看到的,您无需担心段的数量和命名 - 它由上面的查询处理

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BigQuery 使用条件从其他表创建表(管理大量列) 的相关文章

随机推荐

  • 具有 beginwait 函数的信号量

    我正在使用 begin end 编写一个异步库 并且需要锁定对象 目前 我正在使用信号量执行此操作 但调用semaphore WaitOne 在调用该线程的地方挂起该线程 我宁愿使用像 BeginWait 这样的东西 这样它会立即返回并在信
  • Python使用sudo启动时找不到模块

    我有一个使用 Google Assistant 库的脚本 并且必须从那里导入一些模块 我发现这只适用于 Python 虚拟环境 这真的很奇怪 在同一个文件夹中 我有一个使用 GPIO 引脚并且必须使用 root 的脚本 它们相互交互 因此当
  • 文本区域值未随表单一起发布

    我在提交表单时尝试输入文本区域标记
  • 使用 CXF Web 服务进行服务器端 XML 验证

    我正在开发 Apache CXF Web 服务 使用 JAX WS 通过 SOAP 该服务本身非常简单 接收请求 将请求插入数据库 然后返回插入是否成功 我想依靠 XML 验证来对请求实施一些约束 那么 我的问题 如何向我的服务客户返回详细
  • 如何拒绝所有用户删除表

    在 SQL Server 2005 中 有没有一种方法可以使用单个语句来拒绝删除行 在数据库所有用户的特定表中 尝试这个 CREATE TRIGGER yourTriggerName ON YourTableName INSTEAD OF
  • Spark 驱动程序不会因异常而崩溃

    我们在 Kubernetes 上以客户端模式运行 Spark 3 1 1 我们是一个简单的 scala Spark 应用程序 它从 S3 加载 parquet 文件并聚合它们 sparkSession read parquet paths
  • 如何禁用 TensorFlow 的急切执行?

    我正在尝试学习 TensorFlow 目前 我正在使用占位符 当我尝试创建占位符时 出现错误 RuntimeError tf placeholder is not compatible with eager execution 这是有道理的
  • Android SQLite数据库查询排序顺序

    我的数据库中有这样的数据 Alice anderson Beatrice benny Carmen calzone 使用此代码 mDb query DATABASE NAMES TABLE new String KEY ROWID KEY
  • 如何使用 Opencv 存储大量图像的分层 K 均值树?

    我正在尝试制作一个程序 可以从图像数据集中找到相似的图像 步骤是 提取所有图像的 SURF 描述符 存储描述符 对存储的描述符应用 knn 使用 kNN 将存储的描述符与查询图像描述符进行匹配 现在每个图像 SURF 描述符将存储为分层 k
  • R Markdown 中未定义 Tex Proof 环境,生成的 Tex 文件中未定义 amsthm

    编辑以提供更多信息 我正在使用以下 R markdown 文件来生成以下 Tex 文件 我在 rmd 标头中包含 amsthm 它生成一个没有 amsthm 的 Tex 文件 因此 在编译期间并未定义证明环境 这是我的 rmd 文件 tit
  • Android 按钮文字外观

    我可以通过在对象内设置按钮文本外观来更改按钮文本外观 如下所示
  • javax.xml.ws.WebServiceException:找不到端口 {http://tempuri.org/}WSHttpBinding_IDWService

    我正在尝试使用 java 中的 web 服务 使用从 wsdl2java 的 wsdl 文件生成的客户端 我使用的是 Eclipse 版本 Helios 和 jdk 1 6 0 20 并且我使用 wsld2java 生成了 class 文件
  • jQuery 的 getScript 和本地文件系统——限制/替代方案?

    现在我正在开发一个基于本地文件系统的帮助系统 它旨在随不在支持互联网的计算机上使用的产品一起提供 因此它必须是一个独立的网页 不依赖于 Web 服务器 这带来了一些挑战 也就是说 文件所在的目录结构需要 上下 导航才能访问显示帮助系统所需的
  • 使 eternicode datepicker 在点击时打开,而不是焦点打开

    The eternicode Twitter 引导程序日期选择器 https github com eternicode bootstrap datepicker一旦出现
  • Gunicorn 的 gthread 异步工作线程是否类似于 Waitress?

    我读过 2013 年的一些帖子 Gunicorn 团队计划构建一个线程缓冲层工作模型 类似于 Waitress 的工作方式 这就是 gthread 异步工作线程的作用吗 gthread worker 于 2014 年发布了 19 0 版本
  • PHP & MySQL 如何显示数据库中的类别和子类别

    我想知道如何使用 PHP 和 MySQL 显示我的分层数据来创建我的类别和无尽的子类别 一个关于我的 PHP 和 MySQL 代码应该是什么样子的快速示例将会有很大帮助 MySQL 表类别结构 id parent id category 1
  • JTable 未显示在 JFrame (Java) 上

    我遇到了一个问题JFrame没有显示JTable添加到其中 我试过了getContentPane add 我已改为仅添加以使代码更短一些 任何帮助都非常感激 package com embah Accgui import java awt
  • Lisp 当前内存使用情况

    我需要从 Common Lisp 程序中找出当前使用了多少内存 我知道没有可移植的方法 标准函数room以文本形式将信息打印到标准输出 而不是将其作为值返回 但是sb kernel dynamic usage在 SBCL 工作 其他 Com
  • 使用Python从pdf中提取图像

    我们如何从PDF中提取图像 仅图像 我使用了很多在线工具 它们都不是通用的 在大多数 PDF 中 它使用整个图像的屏幕截图而不是图像 PDF链接 gt sg inflibnet ac in 8080 jspui bitstream 1060
  • BigQuery 使用条件从其他表创建表(管理大量列)

    我面临与我的项目相关的问题 这是我想做的事情的摘要 我有一个很大的每日文件 100 Go 其中包含以下摘录 无标题 ID A segment 1 ID A segment 2 ID B segment 2 ID B segment 3 ID