如何在 Bigquery 中声明和访问两个元素的元组?

问题描述

我正在 Bigquery 上创建一个存储过程,它接收一个表名作为输入并检查 information_schema.COLUMNS 表以获取其列名和数据类型。

就我而言,我试图遍历每一列及其数据类型,检查类型是 DATETIME 还是 TIMESTAMP,将该列从 COLNAME 更改为 {{1} }. 我将列的每个结果连接成一个字符串,最终看起来像从参数接收到的表上的选择查询。 为了做这个活动,我写了下面的存储过程:

CAST(COLNAME AS TIMESTAMP/DATETIME) as COLNAME

我声明了一个元组 CREATE OR REPLACE PROCEDURE `projectid`.datasetname.conversion (tablename String,stagingdb String,basedb String) BEGIN DECLARE columnDatatypes ARRAY<STRING,STRING>; DECLARE resultuantColumns STRING; DECLARE i INT64 DEFAULT 0; EXECUTE IMMEDIATE ( "select column_name,data_type from default_dataset.informatION_SCHEMA.COLUMNS where TABLE_NAME=`"||tablename||"`" ) INTO columnDatatypes; WHILE i < ARRAY_LENGTH(primarykey) DO IF(i = ARRAY_LENGTH(primarykey)-1) THEN IF columnDatatypes[OFFSET(i),1] == "TIMESTAMP" THEN SET resultuantColumns = resultuantColumns || "CAST(" || columnDatatypes[OFFSET(i),0] || " as TIMESTAMP) as "" || columnDatatypes[OFFSET(i),1]; SET i = i + 1; ELSEIF columnDatatypes[OFFSET(i),1] == "DATETIME" THEN SET resultuantColumns = resultuantColumns || "CAST(" || columnDatatypes[OFFSET(i),0] || " as DATETIME) as "" || columnDatatypes[OFFSET(i),1]; SET i = i + 1; ELSE SET resultuantColumns = resultuantColumns || columnDatatypes[OFFSET(i),0]; SET i = i + 1; END IF; ELSE IF columnDatatypes[OFFSET(i),1] || ","; SET i = i + 1; ELSEIF columnDatatypes[OFFSET(i),1] == "DATETIME" THEN SET resultuantColumns = resultuantColumns || "CAST(" || columnDatatypes[OFFSET(i),"; SET i = i + 1; ELSE SET resultuantColumns = resultuantColumns || columnDatatypes[OFFSET(i),0] || ","; SET i = i + 1; END IF; END IF; END WHILE; EXECUTE IMMEDIATE ( """INSERT INTO `projectid.datasetname.tablename` VALUES ( """ || resultuantColumns || ");"; ); END; 来保存选择查询的结果,因为它返回两列:columnDatatypes ARRAY<STRING,STRING> & column_name

这里的问题是我在声明两个元素的元组时遇到错误

DECLARE columnDatatypes ARRAY; 错误:语法错误:应为“>”,但在 [3:41]

处得到“,”

当我循环遍历数组时,在基于偏移量访问数组元素时,我看到 WHILE 循环第二个 IF 条件中的另一个错误

data_type

语法错误:在上面的 IF 条件中,预期为 ")" 但在 [11:40] 处得到了 "]"(来自上一行的错误

我尝试了不同的语法来创建元组,如下所示:

WHILE i < ARRAY_LENGTH(primarykey) DO
        IF(i = ARRAY_LENGTH(primarykey)-1) THEN
            IF columnDatatypes[OFFSET(i),1] == "TIMESTAMP" THEN

他们都说语法错误。 我在这里搜索了 Google 的 GCP 文档,但没有关于元组声明和访问其中的元素的参考。 Bigquery 中是否有任何数据类型可以用作元组并按索引位置访问其元素?

谁能告诉我我在这里做的错误是什么,我该如何纠正?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...