小编Gra*_*ley的帖子

SQL在BigQuery中将yyyymmdd转换为时间戳?

我正在尝试将字符串转换为SQL中的时间戳。问题真的很简单,如何将这个字符串转换为从当天的午夜开始的时间戳?

在我的数据库中,我还存储了一个字段timestamp_micros,这些字段中的任何一个都可以工作,并且我认为将micros转换为时间戳会比字符串更容易。

例如 20170118 => timestamp

查询:

WITH allTables as (
  SELECT
      event.date as date,
      count(*) as totalSessions,
      count(DISTINCT user_dim.app_info.app_instance_id) as uniqueUsers
  FROM `namehiddenonlyhere.*`
  CROSS JOIN
      UNNEST(event_dim) AS event
  WHERE
      event.name = 'session_start'
  AND 
      event.date <= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY))
  AND
      event.date >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY))
  GROUP BY event.date

  UNION ALL 
  SELECT
      event.date as date,
      count(*) as totalSessions,
      count(DISTINCT user_dim.app_info.app_instance_id) as uniqueUsers
  FROM `namehiddenonlyhere.*`
  CROSS JOIN
      UNNEST(event_dim) AS event
  WHERE
      event.name = 'session_start'
  AND 
      event.date …
Run Code Online (Sandbox Code Playgroud)

sql timestamp google-bigquery

2
推荐指数
1
解决办法
6333
查看次数

BigQuery全外连接产生"左连接"结果

我有2个表,两个表都包含不同的id值.某些id值可能出现在两个表中,有些值对于每个表都是唯一的.Table1有10,910行,Table2有11,304行

运行左连接查询时:

SELECT COUNT(DISTINCT a.id)
FROM table1 a
JOIN table2 b on a.id = b.id
Run Code Online (Sandbox Code Playgroud)

我在两个表中共享了10,896行或10,896个ID.

但是,当我FULL OUTER JOIN在这两个表上运行时:

SELECT COUNT(DISTINCT a.id)
FROM table1 a
FULL OUTER JOIN EACH table2 b on a.id = b.id
Run Code Online (Sandbox Code Playgroud)

我总共获得了10,896行,但我期待来自table1的所有10,910行.

我想知道我的查询语法是否存在问题.

google-bigquery

2
推荐指数
1
解决办法
4504
查看次数

GA 导出到 BigQuery 需要哪些权限?

我想设置到 BigQuery 的 GA 导出。我正在按照此处所述的步骤操作。在步骤 2.5 中,它指出:

将服务帐号添加到您的项目中。

将 analytics-processing-dev@system.gserviceaccount.com 添加为项目成员,并确保项目级别的权限设置为编辑器(与 BigQuery 数据编辑器相反)。需要编辑者权限才能将数据从 Analytics 导出到 BigQuery。

但是,我不愿意为我的项目提供这种提升的权限(“项目编辑器”将允许完全访问我项目中的所有资源)。

为什么 GA 导出需要如此提升的权限才能与 BigQuery 对话,有没有办法为服务帐户提供最低权限?

google-analytics google-bigquery

2
推荐指数
1
解决办法
639
查看次数

Google-cloud-dataflow:为什么管道使用DirectRunner运行两次?

给定如下数据集

{"slot":"reward","result":1,"rank":1,"isLandscape":false,"p_type":"main","level":1276,"type":"ba","seqNum":42544}
{"slot":"reward_dlg","result":1,"rank":1,"isLandscape":false,"p_type":"main","level":1276,"type":"ba","seqNum":42545}
Run Code Online (Sandbox Code Playgroud)

我尝试通过过滤这些json数据type:ba并将其插入到使用python sdk的bigquery中

ba_schema = 'slot:STRING,result:INTEGER,play_type:STRING,level:INTEGER'

class ParseJsonDoFn(beam.DoFn):
    B_TYPE = 'tag_B'
    def process(self, element):
        text_line = element.trip()
        data = json.loads(text_line)

        if data['type'] == 'ba':
            ba = {'slot': data['slot'], 'result': data['result'], 'p_type': data['p_type'], 'level': data['level']}
            yield pvalue.TaggedOutput(self.B_TYPE, ba)

def run():
    parser = argparse.ArgumentParser()
    parser.add_argument('--input',
                      dest='input',
                      default='data/path/data',
                      help='Input file to process.')
    known_args, pipeline_args = parser.parse_known_args(argv)
    pipeline_args.extend([
      '--runner=DirectRunner',
      '--project=project-id',
      '--job_name=data-job',
    ])
    pipeline_options = PipelineOptions(pipeline_args)
    pipeline_options.view_as(SetupOptions).save_main_session = True
    with beam.Pipeline(options=pipeline_options) as p:
        lines = p | ReadFromText(known_args.input)

        multiple_lines = ( …
Run Code Online (Sandbox Code Playgroud)

google-cloud-dataflow apache-beam

2
推荐指数
1
解决办法
677
查看次数

什么是BigQuery的表装饰器的云数据流等价物?

我们在BigQuery中有一个大表,其中数据正在流入.每天晚上,我们都想运行处理过去24小时数据的Cloud Dataflow管道.

在BigQuery中,可以使用" 表装饰器 " 执行此操作,并指定我们想要的范围,即24小时.

从BQ表读取时,Dataflow中是否可以以某种方式实现相同的功能?

我们已经看过Dataflow 的' Windows '文档,但我们无法确定这是否是我们需要的.到目前为止我们想出了这个(我们希望最后24小时的数据使用FixedWindows),但它仍然试图读取整个表格:

pipeline.apply(BigQueryIO.Read
                .named("events-read-from-BQ")
                .from("projectid:datasetid.events"))
                .apply(Window.<TableRow>into(FixedWindows.of(Duration.standardHours(24))))
                .apply(ParDo.of(denormalizationParDo)
                        .named("events-denormalize")
                        .withSideInputs(getSideInputs()))
                .apply(BigQueryIO.Write
                        .named("events-write-to-BQ")
                        .to("projectid:datasetid.events")
                        .withSchema(getBigQueryTableSchema())
                        .withWriteDisposition(BigQueryIO.Write.WriteDisposition.WRITE_TRUNCATE)                          .withCreateDisposition(BigQueryIO.Write.CreateDisposition.CREATE_IF_NEEDED));
Run Code Online (Sandbox Code Playgroud)

我们走在正确的轨道上吗?

google-cloud-dataflow

1
推荐指数
1
解决办法
190
查看次数

BigQuery是否支持嵌套的CASE语句?

我有一个看起来像这样的要求:

If X <0.01 then Y=1, Z=2
If X>=0.01 then
  If <another_expression> then Y=3, Z=4
  If <another_expression> then Y=5, Z=6
Run Code Online (Sandbox Code Playgroud)

依此类推,其中'Y'和'Z'是列别名.

我看过使用CASE语句,但它似乎不支持嵌套的 CASE语句.

我错过了一些明显的东西吗 或者有更好的方法来实现它吗?

google-bigquery

1
推荐指数
1
解决办法
1380
查看次数

BigQuery:检视-vs-表格查询速度

我对使用视图将访问限制为仅对表的某些分区感兴趣。从视图中选择而不是直接从表中选择(响应时间缩短或数据使用量增加),我是否期望看到性能下降?数据是否必须选择两次?

查看查询:

SELECT 
     *

FROM 
     project:dataset.table 

WHERE 
     _PARTITIONTIME between DATE_ADD(CURRENT_TIMESTAMP(), -1, "MONTH") and CURRENT_TIMESTAMP()
Run Code Online (Sandbox Code Playgroud)

google-bigquery

1
推荐指数
1
解决办法
1341
查看次数

在Google BigQuery中获取给定月份的总天数?

我可以创建用户定义的函数并计算给定月份的总天数.是否有直接的方法在给定日期内在给定月份内没有天数

例如.

select date_t, some_inbuilt_function_get_total_no_of_days_in_month(date_t)
Run Code Online (Sandbox Code Playgroud)

从给定日期开始有月份功能,同样有日期功能,所以我可以去月初.有日期差异功能,但没有办法到月底.

参考:https://cloud.google.com/bigquery/docs/reference/legacy-sql

google-bigquery

1
推荐指数
2
解决办法
1774
查看次数