google datastudio 中关于使用自定义查询的错误

Posted

技术标签:

【中文标题】google datastudio 中关于使用自定义查询的错误【英文标题】:error in google datastudio on using custom query 【发布时间】:2020-07-12 10:02:07 【问题描述】:

我正在使用一个简单的 sql 语句块在大查询中执行并返回一组结果,这在大查询中工作正常并获得结果,我需要将此数据导出到数据工作室,所以在数据工作室我使用 bigquery 作为连接器并选择项目和自定义查询,并在其中粘贴以下内容:

 Declare metricType String;
    SET metricType="compute.googleapis.com/instance/cpu/utilization";
    BEGIN
    IF (metricType="compute.googleapis.com/instance/cpu/usage_time")
    THEN
      SELECT m.value as InstanceName,metric.type as metricType,point.value.double_value as usagetime,point.interval.start_time as StartTime,point.interval.end_time as EndTime,h.value  as instance_id FROM `myproject.metric_export.sd_metrics_export_fin`, unnest(resource.labels) as h,unnest(metric.labels) as m where metric.type='compute.googleapis.com/instance/cpu/usage_time' and h.key="project_id";
      ELSE IF (metricType="compute.googleapis.com/instance/cpu/utilization")
      THEN
      SELECT m.value as InstanceName,metric.type as metricType,point.value.double_value as utilizationrate,point.interval.start_time as       
     StartTime,point.interval.end_time as EndTime,h.value   as instance_id FROM `myproject-.metric_export.sd_metrics_export_fin`,unnest(resource.labels) as h,unnest(metric.labels) as m where metric.type='compute.googleapis.com/instance/cpu/utilization' and h.key="project_id";
    END IF;
    END IF;
    END;

但点击“添加”按钮后,我收到以下错误:

我不确定这个错误是关于什么的?我没有使用任何存储过程,我只是将其粘贴为自定义查询。

此外,如果我尝试将 BigQuery 的结果保存到 Bigquery 控制台结果窗格中的视图中,则会出现错误,

Syntax error: Unexpected keyword DECLARE at [1:1]

我对 datastudio 和 bigquery 都非常陌生。请帮忙谢谢

【问题讨论】:

尝试在 bigquery UI 中运行查询,然后在数据工作室中使用。这样查询就不会有任何问题 它在大查询中工作正常,但 datastudio 给出了这个错误代码 @user1403505,而不是使用Begin 编写脚本,您是否考虑过使用CASE WHEN?因为在您的查询中,循环永远不会进入第一个IF 是的,我将在datastudio中使用那个metrictype作为参数,这样它就会进入两个循环,现在甚至声明关键字的语法错误 【参考方案1】:

首先,我想对您的查询做一些考虑。您正在使用 Scripting 在查询中声明和创建循环。但是,由于您在查询的开头声明并设置了metricsType,它永远不会进入第一个IF。发生这种情况是因为值已设置并且它没有循环任何内容。

我建议你改用CASE WHEN,如下:

SELECT m.value as InstanceName,metric.type as metricType,     
      CASE WHEN metric.type = @parameter THEN point.value.double_value ELSE 0 END AS  usagetime,
      CASE WHEN metric.type = @parameter THEN point.value.double_value ELSE 0 END AS utilizationrate,
      point.interval.start_time as StartTime,point.interval.end_time as EndTime,h.value  as instance_id 
FROM `myproject.metric_export.sd_metrics_export_fin`, unnest(resource.labels) as h,unnest(metric.labels) as m 
WHERE metric.type=@parameter and h.key="project_id";
  

请注意,我使用的是Parameterized queries 的概念。此外,由于这个原因,此查询在控制台中不起作用。此外,请注意,当您将 @parameter 设置为 "compute.googleapis.com/instance/cpu/utilization" 时,它将有一个 non-null 列,其中包含 usagetime 和一个 null 列名为 utilizationrate

其次,为了在DataStudio中添加一个新的数据源,你可以关注这个tutorial from the documentation。之后,选择 New Report,点击 BigQuery Connector > 自定义查询 strong>> 写下你的项目ID,你需要点击ADD PARAMETER(在查询编辑器下方)。在上面的查询中,我会添加:

名称: 参数 显示名称: 参数 数据类型: 文本 默认值:留空 选中复选框允许在报告中修改“参数”。这意味着您将能够将此参数用作过滤器并在报告中修改其值。

按照上述所有步骤,数据源将被顺利添加。

最后,我必须指出,如果您的查询在控制台中运行,您可以通过单击 保存视图 将其保存为视图,例如描述了here。

【讨论】:

非常感谢我会试试这个

以上是关于google datastudio 中关于使用自定义查询的错误的主要内容,如果未能解决你的问题,请参考以下文章

Google DataStudio:链接参数以控制下拉列表

如何在应用脚本高级服务中指定要在 Google DataStudio 中使用的数组字段?

Google DataStudio SSL 连接到 MariaDB

SQL 如何使用 LEFT JOIN 从表中选择单个值,在 Google Datastudio 中

如何使用适用于 Web 服务器应用程序的 Google OAuth 2.0 向 Google ID_Token 添加自定义声明

google data studio如何收费