【问题标题】:Creating a New Table in Big Query from a log table and a reference table从日志表和参考表在 Big Query 中创建新表
【发布时间】:2017-04-27 22:13:38
【问题描述】:

我是大查询的新手,需要创建一个烫发。来自日志文件和参考表的表。我是新手,做错了什么,但不知道为什么。请帮忙。

日志文件(示例)

-Event_Time,User_ID,Type

-1/1/2017,123_abc,a

-1/2/2017,123_bcd,b

-1/2/2017,123_abc,c

参考表(示例)

-类型合作伙伴

-a 1

-b 2

-c 3

-d 3

create table workarea.SummaryTable AS (
User_ID string,
TotalCount integer,
imps_time timestamp,
Partner integer)

insert into workarea.SummaryTable
select distinct User_ID,
COUNT(*) as TotalCount,
MIN(TIME) as imps_time,
SUM(case when Partner = '1' then 1 else 0 end) as 1,
SUM(case when Partner = '2' then 1 else 0 end) as 2,
SUM(case when Partner = '3' then 1 else 0 end) as 3

from workarea.logfile i
join workarea.referencetable r on i.Type=r.Type
where CID=10848805 
group by USER_ID

【问题讨论】:

    标签: sql google-bigquery


    【解决方案1】:

    .. 做错了什么,但不知道为什么

    到目前为止,我已经确定了以下故障点

    1. CREATE TABLE 语句在 BigQuery 中不可用
      Data Manipulation Language 仅允许您使用 INSERTDELETEUPDATE

    您需要有表pre-created,然后才能在其中操作/插入数据

    1. 别名不能以数字开头 -

    所以下面的片段不正确

    SUM(CASE WHEN Partner = '1' THEN 1 ELSE 0 END) AS 1,    
    SUM(CASE WHEN Partner = '2' THEN 1 ELSE 0 END) AS 2,    
    SUM(CASE WHEN Partner = '3' THEN 1 ELSE 0 END) AS 3    
    

    你应该使用类似的东西

    SUM(CASE WHEN Partner = '1' THEN 1 ELSE 0 END) AS Partner_1,    
    SUM(CASE WHEN Partner = '2' THEN 1 ELSE 0 END) AS Partner_2,    
    SUM(CASE WHEN Partner = '3' THEN 1 ELSE 0 END) AS Partner_3    
    
    1. 某些字段看起来在引用的表中不存在,但您在最终查询中使用它们:MIN(time) as imps_time 中的timeWHERE CID=10848805 中的CID

    2. 目标表的架构有 4 个字段 - 而 select 语句的架构有 6 个字段。你应该清除这个!他们必须匹配!

    可能的“解决方案”(BigQuery 标准 SQL)

    我假设(只是为了在这里取得一些进展)您的目标表的架构实际上如下所示

    User_ID STRING,
    TotalCount INT64,
    imps_time TIMESTAMP,
    Partner_1 INT64,
    Partner_2 INT64,
    Partner_3 INT64
    

    在这种情况下 - 下面的查询应该产生正确的插入结果

    #standardSQL
    SELECT 
      User_ID,
      COUNT(*) AS TotalCount,
      MIN(Event_Time) AS imps_time,
      SUM(CASE WHEN Partner = '1' THEN 1 ELSE 0 END) AS Partner_1,
      SUM(CASE WHEN Partner = '2' THEN 1 ELSE 0 END) AS Partner_2,
      SUM(CASE WHEN Partner = '3' THEN 1 ELSE 0 END) AS Partner_3
    FROM `workarea.logfile` i
    JOIN `workarea.referencetable` r ON i.Type=r.Type
    -- WHERE CID=10848805 
    GROUP BY USER_ID
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-30
      • 2017-01-08
      • 1970-01-01
      • 2020-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多