如何将我的 Bigquery 查询转换为 AWS Athena 查询?

Posted

技术标签:

【中文标题】如何将我的 Bigquery 查询转换为 AWS Athena 查询?【英文标题】:How do I translate my Bigquery query to AWS Athena query? 【发布时间】:2021-06-18 03:54:51 【问题描述】:

我目前在翻译此 Bigquery 代码时遇到问题:

WITH
  dates AS (
  SELECT
    REPLACE('2020-09-10','-','') AS req_date)
SELECT
  hits.type,
  hits.hitNumber
FROM
  my_data_table_from_GA,
  UNNEST(hits) hits
WHERE
  _TABLE_SUFFIX = (
  SELECT
    req_date
  FROM
    dates)
  AND ClientId = '1234.5678910'
  AND visitstarttime = 1600000000;

My output looks like this in Bigquery

同样,我试图将查询转换为 Athena,如下所示:

SELECT 
  hits[1].type,
  hits[1].hitNumber
  
FROM 
  my_data_table_from_GA,
  UNNEST(hits) hits
WHERE 
 (from_iso8601_date(CAST((substring(date,1,4) || '-' || substring(date,5,2) || '-' || substring(date,7,2)) AS varchar))) = date('2020-09-10') 
 AND ClientId = '1234.5678910' AND visitstarttime = 1600000000;

但是,输出看起来不同as shown here.hitnumber 始终为 1,这不应该是这种情况,并且 PAGE 与 EVENT 的比例看起来与上面 Bigquery 的输出不同。

我的源数据来自 Google Analytics,我最大的问题是我不确定如何在 Athena 中查询“命中”,以便在 Bigquery 中产生相同的输出。我尝试了 hits.type,但它给了我一个错误,说“表达式命中不是 ROW 类型”。这就是我输入“hits1.type”的原因,但我认为这有问题。如果有人可以帮助我,将不胜感激!

【问题讨论】:

【参考方案1】:

我设法解决了我的问题。

这对我有用:

SELECT 
  hit.type,
  hit.hitNumber
  
FROM 
  my_data_table_from_GA,
  UNNEST(hits) WITH ORDINALITY t(hit, index)
WHERE 
 (from_iso8601_date(CAST((substring(date,1,4) || '-' || substring(date,5,2) || '-' || substring(date,7,2)) AS varchar))) = date('2020-09-10') 
 AND ClientId = '1234.5678910' AND visitstarttime = 1600000000;

【讨论】:

以上是关于如何将我的 Bigquery 查询转换为 AWS Athena 查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何将我的 N 个小查询转换为一个查询?

如何将我的 pymysql 查询结果转换为 json 格式?

是否可以在 aws lambda 中使用 bigquery?

AWS ECS 使用 docker 和 nginx,如何将我的 nginx 配置放入容器中?

将 MySQL 查询转换为 BigQuery 查询

如何将 BigQuery SQL 查询结果转换为 Spark DataFrame?