当前位置: 首页 > 面试题库 >

如何在BigQuery / SQL中将行转换为包含大量数据的列?

安高翰
2023-03-14
问题内容

我在将BigQuery(15亿行)中的大量数据表从行转换为列时遇到问题。我可以弄清楚在进行硬编码时如何处理少量数据,但处理量如此之大。该表的快照如下所示:

+--------------------------+ | CustomerID Feature Value | +--------------------------+ | 1 A123 3 | | 1 F213 7 | | 1 F231 8 | | 1 B789 9.1 | | 2 A123 4 | | 2 U123 4 | | 2 B789 12 | | .. .. .. | | .. .. .. | | 400000 A123 8 | | 400000 U123 7 | | 400000 R231 6 | +--------------------------+

因此,基本上大约有400,000个具有3000个功能的不同的customerID,并且并非每个customerID都具有相同的功能,因此,某些customerID可能具有2000个功能,而有些具有3000个功能。并具有代表所有功能的3000列。像这样:

CustomerID Feature1 Feature2 ... Feature3000

因此,某些单元格可能缺少值。

任何人都知道如何在BigQuery或SQL中执行此操作?

提前致谢。


问题答案:
STEP #1

在下面的查询中,用yourTable表的真实名称替换并执行/运行它

SELECT 'SELECT CustomerID, ' + 
   GROUP_CONCAT_UNQUOTED(
      'MAX(IF(Feature = "' + STRING(Feature) + '", Value, NULL))'
   ) 
   + ' FROM yourTable GROUP BY CustomerID'
FROM (SELECT Feature FROM yourTable GROUP BY Feature)

结果,您将获得一些要在下一步中使用的字符串!

STEP #2

以您从第1步获得的字符串作为查询执行它,
输出是您询问的数据透视表



 类似资料:
  • 问题内容: 今天,我的同事要求我将数据从垂直登台表转换为水平表。我的意思是将行转换为列。我使用了PIVOT并解决了它。但是遇到了这样的情况:如果数据字段重复自身,则在移动数据时会遇到麻烦。 这是我正在处理的测试数据: 我使用PIVOT将行数据显示为列: 输出为: 但他希望输出如下: 最重要的是,登台表中可以有多个CHILD属性。我们需要考虑这一点,并将所有儿童移动到列中。 这可能吗? 问题答案:

  • 嗨,我是redis的新手,想在这里得到一些帮助。我使用java和sql Server2008和redis server。为了与redis交互,我使用jedis api for Java。我知道redis用于存储基于键值的东西。每个键都有值。 问题背景: 我有一个名为“用户”的表,它存储数据,如id,姓名,电子邮件,年龄,国家。这是sql表的模式。现在这个表有一些行(也表示一些数据)。现在,我的主键

  • 问题内容: 我有一张像这样的桌子: 想要将其转换为: 在oracle中不使用此联合: 问题答案: 您可以尝试使用unpivot sqlfiddle:https ://dbfiddle.uk/ ? rdbms = oracle_11.2 & fiddle = b2105e1010b332ce5b702eba7bfa7f2d

  • 问题内容: 我正在使用SQL Server 2008,并且想要将表数据转换为json格式。我可以通过触发查询直接将其转换吗? 问题答案: SQL Server 2016中添加了对格式化查询结果的内置支持,它将在Azure数据库中可用。在旧版本中,您将需要使用CLR或一些繁重的TSQL,例如: 通过TSQL从SQL Server查询中产生JSON文档

  • 问题内容: 我试图使用像这样的数字列表。 这是sql过程的一部分,变量’list_of_ids’是varchar,它包含如下所示的id:1、2、3、4、5 ........如何使用此列表和此查询 问题答案: 也尝试一下。这可能是更好的解决方案,因为它不需要创建任何其他功能。oracle regexp_substr会将逗号分隔的值拆分为不同的行,并传递给查询。

  • 本文向大家介绍如何通过R中的行将数据帧值转换为向量?,包括了如何通过R中的行将数据帧值转换为向量?的使用技巧和注意事项,需要的朋友参考一下 数据可以任何形式提供给我们,但有可能不适合用于分析。有时数据记录在数据框中,但我们可能需要将其作为向量。在这种情况下,我们必须更改向量中数据帧的值。这可以通过在将数据帧与t换位后将它们读取为矢量来读取数据帧值来完成。 示例 请看以下数据帧- 让我们看另一个例子