将键值对拆分为 Google BigQuery 中的列

2023-12-09

我对 Google BigQuery 还很陌生,而且确实很挣扎。

我的表有以下内容:

+----------+----------------------------------------+
| order_id |               line_items               |
+----------+----------------------------------------+
|      123 | id:1|qy:1|sum:1.00;id:2|qy:6|sum:4.50; |
+----------+----------------------------------------+
|      456 | id:1|qy:3|sum:3.00;id:3|qy:4|sum:3.20; |
+----------+----------------------------------------+

我需要看起来像这样:

+----------+----+----+------+
| order_id | id | qy | sum  |
+----------+----+----+------+
|      123 |  1 |  1 | 1.00 |
|      123 |  2 |  6 | 4.50 |
|      456 |  1 |  3 | 3.00 |
|      456 |  3 |  4 | 3.20 |
+----------+----+----+------+

line_items 中键值对的数量是任意的(而且数量远多于这 3 个,但我需要提取这三个)。

我能够使以下 UNNEST 和 SPLIT 查询正常工作,但不幸的是我仍然有这些键值对......

This

SELECT
  order_id,
  line_items
FROM
  `myTable`,
  UNNEST(SPLIT(line_items,"|")) line_items

把我带到这里:

+----------+------------+
| order_id | line_items |
+----------+------------+
|      123 | id:1       |
|      123 | qy:1       |
|      123 | sum:1.00   |
|      123 | id:2       |
|      123 | qy:6       |
|      123 | sum:4.50;  |
|      456 | id:1       |
|      456 | qy:3       |
|      456 | sum:3.00   |
|      456 | id:3       |
|      456 | qy:4       |
|      456 | sum:3.20   |
+----------+------------+

所以我仍然不知道如何提取列标题的这些键和列内容的值。

如果有人指出我正确的方向,我将不胜感激。

已经非常感谢了!


以下是 BigQuery 标准 SQL

#standardSQL
select order_id, 
  ( select split(kv, ':')[offset(1)] from x.kvs kv where split(kv, ':')[offset(0)] = 'id') id,
  ( select split(kv, ':')[offset(1)] from x.kvs kv where split(kv, ':')[offset(0)] = 'qy') qy,
  ( select split(kv, ':')[offset(1)] from x.kvs kv where split(kv, ':')[offset(0)] = 'sum') sum
from `project.dataset.table`,
unnest(split(trim(line_items, ';'), ';')) items,
unnest([struct(split(items,'|') as kvs)]) x
-- order by order_id    

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

enter image description here

上面的以下变体也很有用

#standardSQL
select order_id, 
  (select value from z.y where key = 'id') id,
  (select value from z.y where key = 'qy') qy,
  (select value from z.y where key = 'sum') sum
from `project.dataset.table`,
unnest(split(trim(line_items, ';'), ';')) items,
unnest([struct(split(items,'|') as kvs)]) x,
unnest([struct(array(
  select as struct 
    split(kv, ':')[offset(0)] as key, 
    split(kv, ':')[offset(1)] value 
  from x.kvs kv
) as y)]) z
-- order by order_id 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将键值对拆分为 Google BigQuery 中的列 的相关文章

  • BigQuery 表中可以按小时进行分区吗?

    谷歌文档只讨论日常分区 但是模型中是否有任何东西阻碍人们将分区填充到具有其他时间段 例如 小时或周 的表中 在 小 表中进行分区是否有任何限制或缺点 现在only DAY支持分区表 不支持按小时或按月 有几个对新功能的功能请求 但没有实施时
  • 使用 Airflow BigqueryOperator 向 BigQuery 表添加标签

    我必须向 bigquery 表添加标签 我知道可以通过 BigQuery UI 来完成此操作 但如何通过气流运算符来完成此操作 Use case 用于计费和搜索目的 由于多个团队在同一项目和数据集下工作 我们需要将各个团队创建的所有表组合在
  • 从 Dataflow 中的 BigQuery 读取时设置 MaximumBillingTier

    当我从 BigQuery 读取数据作为查询结果时 我正在运行 GCP Dataflow 作业 我正在使用 google cloud dataflow java sdk all 版本 1 9 0 设置管道的代码片段如下所示 PCollecti
  • 如何从 firebase 导出无崩溃的用户?

    我想将有关崩溃和无崩溃用户指标的数据保留在数据库中以供进一步分析 我已经将该项目链接到 BigQuery 但找不到计算方法无崩溃用户BigQuery 中包含的数据价值 是否可以以某种方式导出无崩溃的用户指标 这里是 Fabric Fireb
  • Google BigQuery:检索每行的最后版本

    我有一个 Google BigQuery 表 其中包含所有版本的资源 每次创建 更新 删除资源时 都会添加一个新行 并递增版本号 该数字将是添加行时的时间戳 ID ResourceID Action Count Timestamp ABC
  • BigQuery 数据类型

    我正在开始一个新项目 只是想在定义表模式之前进行验证 BigQuery 是否支持以下以外的其他功能 string integer float boolean BigQuery 数据类型官方文档 https cloud google com
  • BigQuery 中使用 GROUPBY 的百分位函数

    在我的人口普查表中 我想按州分组 并为每个州获取县人口中位数和县数量 在 psql redshift 和 Snowflake 中 我可以这样做 psql gt SELECT state count county PERCENTILE CON
  • 在bigquery中比较两个表的有效方法

    我有兴趣比较两个表是否包含相同的数据 我可以这样做 standardSQL SELECT key1 key2 FROM SELECT table1 key1 table1 key2 table1 column1 table2 column1
  • bq 命令行工具:当文本包含“ > ”或“ < ”时查询失败

    我在使用 bq 命令行工具运行包含 gt 或 下面的前两个示例显示 当我尝试从 id gt 300 的表中选择行时 不会返回任何内容 但当我选择 id 301 时 我会得到结果 后两个示例表明 当我尝试选择 id 有谁知道为什么会发生这种情
  • 从字符串到日期的日期格式

    我正在使用上传的 csv 进行日期格式化 其中日期是具有以下格式的字符串 10 30 2021 8 41 PM 我试图在谷歌大查询中将其更改为 mm dd yyyy 但不断收到错误消息 提示 无效日期 或 无效日期时间 我尝试过使用子字符串
  • 有没有办法确定或指定 BigQuery 将数据存储在哪个地理区域?

    有没有办法确定哪个区域 像这些 https cloud google com compute docs zones available BigQuery 将我的数据存储在 更重要的是 有没有办法指定我的数据发送到 BigQuery 时的存储
  • 比较 BigQuery 中的表

    我如何比较两个表 Table1 and Table2 并查找所有新条目或更改Table2 使用 SQL Server 我可以使用 Select from Table1 Except Select from Table2 这是我想要的示例 T
  • 如何在 BigQuery/SQL 中将行转置为包含大量数据的列?

    我在将 BigQuery 中的大量数据表 15 亿行 从行转置为列时遇到问题 我可以弄清楚如何在硬编码时使用少量数据来完成此操作 但是对于如此大量的数据 该表的快照如下所示 CustomerID Feature Value 1 A123 3
  • 第一天安装者的原始 BigQuery 日志数据

    我对 StandardSQL 相当陌生 想要导出在给定日期 2017 年 6 月 1 日 安装的用户的原始 BigQuery 日志数据 以及安装日期 D0 D20 当天和之后前 3 周的会话数据 StandardSQL SELECT use
  • 使用 #standardSQL 在 BigQuery 上运行异步 JS 函数

    既然 BigQuery 在 standardSQL 上支持异步 我如何转换此 legacySQL 函数以在 standardSQL 上运行 legacySQL SELECT SUM s FROM js SELECT FLOOR RAND 1
  • 如何合并两个 id 列,识别哪些行属于同一组相关 ID

    我有 2 个独立创建 收集的 ID 列 我试图通过根据两个 ID 列之一确定哪些行属于同一相关 id 组的一部分 从而将这两个 ID 列合并为一个 我会根据一些规则考虑行的相关性 1 如果一个LOAN在多行中具有相同的值 则它们属于同一组
  • BigQuery:从带有时区的日期时间中提取日期

    我正在尝试返回 BigQuery 中的一列以及从该列中提取的日期开始时间 该列中的值的格式为 11 27 2019 14 40 15 CET 0100 我写了以下代码 SELECT EXTRACT DATE FROM TIMESTAMP s
  • 是否可以统计 JSON 列中每个键出现的次数?

    我有一个 BigQuery 表 其中有一列 其中包含 JSON 我想输出每个键在列中出现的次数 然后按计数降序排序 与所有键关联的值是1 每个对象都有已知 有限数量的键 但我宁愿不依赖它 以防最大的对象发生变化 总体而言 键的数量是已知 有
  • 在不成为项目用户的情况下在 BigQuery 中运行查询

    共享数据集以便其他人可以对数据集中的表运行查询的唯一方法似乎是使该人成为一个项目user See 权限 https cloud google com bigquery docs access control predefined iam r
  • Python BigQuery 存储。并行读取多个流

    我有以下玩具代码 import pandas as pd from google cloud import bigquery storage v1beta1 import os import google auth os environ G

随机推荐

  • 如何使用多处理在 for 循环中并行化对同一函数(具有不同参数)的两次调用?

    在 for 循环中 我使用不同的参数集调用一个函数两次 argSet1 argSet2 在 for 循环的每次迭代中都会发生变化 我想并行化此操作 因为一组参数会导致被调用的函数运行得更快 而另一组参数会导致函数运行缓慢 请注意 我do n
  • 您查找段错误原因的方法是什么?

    或者只是一般性地调试 您喜欢如何查找代码中的错误 专门针对 C C 但适用于所有语言 我一直在试图找到这个令人讨厌的段错误的原因 但我希望自己能找到它 而不是将其发布到网上 您对像我这样的学徒有什么建议吗 使用 gdb 等调试器并在出现 s
  • 在 Adapter 的构造函数中传递 Fragment

    由于 onClick 事件永远不会在ViewPager see 这个问题 我要设置onClickListener到适配器中的项目容器 这个想法是 当单击一个项目时 从适配器调用 Fragment 中的方法 其中该适配器设置为ViewPage
  • wpf mvvm混淆

    根据我对 mvvm 的理解是 有一个模型 也实现inotify的实体类 视图 xaml代码 和一些类如vm 通常继承icommand的控制器 让我们在特定事件上生成事件 命令 我只是想知道 viewmodel 类和 xaml 类背后的代码之
  • 正则表达式 - PCRE (PHP) - 单词边界 (\b) 和重音字符

    为什么这封信 算作单词边界匹配 b在下面的例子中 图案 b cum b i Text cum 匹配不需要的 cum 有可能克服这个吗 当您添加u正则表达式的修饰符 b cum b iu
  • 在 weblogic 上访问 Mbean

    来自 oracle 的文档 域运行时 MBean 服务器 此 MBean 服务器也充当单个 驻留在托管服务器上的 MBean 的访问点 我想要做的是利用这个事实来访问分散在多个托管服务器中的所有自定义 mBean 例如假设我有两个节点 se
  • Roslyn – 自定义构建错误扩展

    目前是否有一种方法可以扩展 Roslyn 编译并添加一些自定义规则集 这些规则集会破坏构建并显示在 VisualStudio 的错误列表中 我搜索 StackOverflow 但没有有效的答案 也许最近在这个主题中出现了一些东西 或者也许有
  • 与 Mongo 聚合的运算符 $arrayElemAt < 3.2

    使用聚合蒙戈框架 我怎样才能达到相同的结果蒙戈 as in 蒙戈3 2随着操作 arrayElemAt Mongo 3 2 中的示例 收藏 id 1 name dave123 favorites chocolate cake butter
  • 使 JFormattedTextField 接受 3 位以上的小数

    我有一个JFormattedTextField它应该能够接受超过 3 位小数的双数 它接受条目0 1 0 01 0 001但拒绝0 0001以及具有更多小数位的数字 这就是我的代码现在的工作方式 DecimalFormat decimalF
  • 使用 confint() 估计 GLMM CI 时出错

    我有一组装有二元响应变量和一组连续变量的 GLMM 我想获得每个模型的置信区间 我一直在使用confint 功能 在 95 并且与profile方法 如果将其应用于没有交互的模型 那么它的工作不会出现任何问题 然而 当我申请时confint
  • 用模板专门化一个模板

    我有一个 免费 函数模板 如下所示 template
  • 确认值未从甜蜜警报服务返回

    已经创建了甜蜜的警报作为单独的服务 我将其注入到我的服务中 这就是贴心的提醒服务 function use strict angular module app services factory SweetAlert SweetAlertSe
  • 在 PyCharm 中添加代码模板 - 可能吗?

    我想向 PyCharm 添加新的代码模板 片段 例如我想扩展lw to log write Line here is sould be cursor after code completition from snippet 就像是https
  • R Xgboost:如何在 Windows 10 上编译具有 GPU 支持的 xgboost

    我按照此链接中提供的说明进行操作 如何在python windows平台 中安装xgboost包 and https xgboost readthedocs io en latest build html installing r pack
  • 单击锚点应该执行 javascript 而不是转到新页面

    我有一个 HTML 锚点 单击该锚点会使 div 向上或向下滑动 我称之为 JQuery 的 slideToggle 功能 我的问题 当我单击该链接时 它不会执行代码 而是会转到一个新页面 其中 url 是 javascript 代码 在我
  • app.config 文件和 XYZ.settings 文件有什么区别?

    我实际上正处于 NET 相关内容的学习阶段 我正在探索如何保存应用程序 我最终编写了自己的类 它将设置保存在 XML 文件中 然后我发现 NET 本身支持保存应用程序设置 但我找到了两种方法可以做到这一点 当我在 Visual Studio
  • 为什么我收到“密钥凭证开始日期无效。”尝试创建 Active Directory 服务主体

    我一直在尝试整合一系列围绕创建和刷新 AD 服务主体和应用程序的操作 我遇到问题的流程是 从 Azure Key Vault 获取证书 使用证书进行身份验证创建服务主体 和应用程序 PS gt Get AzureKeyVaultCertif
  • Jquery 可拖动 + 置于前面

    我有一个带有多个聊天 DIV 的窗口 用户可以在其中与不同的人聊天 目前 聊天 DIV 可以打开并移动 但我看不到将当前选择的 DIV 设置在前面 例如 当您将鼠标放在 DIV 上时 它会进入前台 HTML div class chatMe
  • 将文件上传到 HTML 表单并提交之间会发生什么?

    文件上传到 HTML 表单后 提交之前会发生什么情况 我已将简历上传到该网站https studyhut com employment 然后点击红色X将其删除 但我想确保它确实被删除了 检查 选择文件 按钮的元素 我发现它的 HTML 是
  • 将键值对拆分为 Google BigQuery 中的列

    我对 Google BigQuery 还很陌生 而且确实很挣扎 我的表有以下内容 order id line items 123 id 1 qy 1 sum 1 00 id 2 qy 6 sum 4 50 456 id 1 qy 3 sum