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 SSL 连接到 MariaDB
SQL 如何使用 LEFT JOIN 从表中选择单个值,在 Google Datastudio 中
如何使用适用于 Web 服务器应用程序的 Google OAuth 2.0 向 Google ID_Token 添加自定义声明