使用Python

时间:2017-07-19 05:18:04

标签: python google-bigquery

对于简短的摘要 - 我想设置一个变量,该变量等于表中存在的行数或数据条目的数量。

我在Python脚本中运行一个查询,该查询计算过去一周我的应用中使用的设备数量。我通过计算不同的序列号来做到这一点。目前我正在使用此查询。

#standardsql
SELECT count(distinct serial)
FROM `dataworks-356fa.FirebaseArchive.test2` 
Where (PeripheralType = 1 or PeripheralType = 2 or PeripheralType = 12)
AND EXTRACT(WEEK FROM createdAt) = EXTRACT(WEEK FROM CURRENT_TIMESTAMP()) - 1
AND serial != 'null'

然后我使用此代码将此结果发送到我的python脚本中的稍后时间。

with open('Count_BB_Serial_weekly.json', 'r') as lowfile:
  low = json.load(lowfile)

low1 = low["f0_"]

f0_ =计算的不同序列号的数量

但是,现在我想添加一个功能,我还可以看到已使用的序列号以及使用的不同序列号的数量。列出序列号的查询与上面的类似,只是没有count(distinct)部分。有没有办法可以将low1设置为等于表中的行数,因为我无法运行同时列出序列号的count函数。希望你能跟上这个。如果有任何混淆,我会在评论中解决。

谢谢!

1 个答案:

答案 0 :(得分:3)

您可能已经将此结果带入BigQuery。例如:

#standardSQL
WITH data AS(
  SELECT '1' AS serial UNION ALL
  SELECT '2' as serial UNION ALL
  SELECT '3' AS serial UNION ALL
  SELECT '1' AS serial
)

SELECT
  ARRAY_AGG(DISTINCT serial) distinct_serials,
  ARRAY_LENGTH(ARRAY_AGG(DISTINCT serial)) total_serials
FROM
  data

结果:

[
  {
    "distinct_serials": [
      "2",
      "1",
      "3"
    ],
    "total_serials": "3"
  }
]

或者在您的查询中,它将类似于:

#standardsql
SELECT
    ARRAY_AGG(serial) serials,
    ARRAY_LENGTH(ARRAY_AGG(serial)) total_serials
FROM(
SELECT distinct serial AS serial
FROM `dataworks-356fa.FirebaseArchive.test2` 
Where (PeripheralType = 1 or PeripheralType = 2 or PeripheralType = 12)
AND EXTRACT(WEEK FROM createdAt) = EXTRACT(WEEK FROM CURRENT_TIMESTAMP()) - 1
AND serial != 'null')

结果应该是这样的:

[{"serials": ["serial_1", "serial_2", (...)], "total_serials": 10}]

您将拥有包含序列号的ARRAY和包含总条目的另一个字段。