Google bigquery 语法错误:应为";(“或”、“或”关键字选择,但在BigQuery上的[20:46]处得到了“或”

Google bigquery 语法错误:应为";(“或”、“或”关键字选择,但在BigQuery上的[20:46]处得到了“或”,google-bigquery,Google Bigquery,我正在尝试对email列中的值进行散列,并将它们插入salt列 我是BigQuery的新手,对语法非常不熟悉。我将s作为电子邮件字符串输入,并将其转换为哈希值,该值将作为字符串返回 CREATE TEMP FUNCTION SaltforEmail(s STRING) RETURNS STRING LANGUAGE js AS """ var hash = 0; if (s.length == 0) return h

我正在尝试对email列中的值进行散列,并将它们插入salt列 我是BigQuery的新手,对语法非常不熟悉。我将s作为电子邮件字符串输入,并将其转换为哈希值,该值将作为字符串返回

CREATE TEMP FUNCTION SaltforEmail(s STRING)
  RETURNS STRING
  LANGUAGE js AS """


                var hash = 0; 

                if (s.length == 0) return hash; 

                for (i = 0; i < s.length; i++) { 
                    char = s.charCodeAt(i); 
                    hash = ((hash << 5) - hash) + char; 
                    hash |=  0; 
                } 

                return toString(hash); 

""";
with s as (SELECT Email as everyone 
FROM `study-in-india-272211.Hashing.Mapping`);
INSERT `study-in-india-272211.Hashing.Mapping` (salt)
VALUES (SaltforEmail(s)); 
创建临时函数SaltforEmail(s字符串)
返回字符串
语言js为“”
var散列=0;
如果(s.length==0)返回哈希;
对于(i=0;ihash=((hash首先,我不明白您想在hash函数中执行什么操作,但它不返回字符串。这就是为什么我更改了函数以仅返回hash整数。您可能需要检查函数本身

其次,您需要的是更新表而不是更新。因此,您可以使用该查询:

CREATE TEMP FUNCTION SaltforEmail(s STRING)
RETURNS STRING
LANGUAGE js AS """
  var hash = 0; 
  if (s.length == 0) return hash; 
  for (i = 0; i < s.length; i++) { 
    char = s.charCodeAt(i); 
    hash = ((hash << 5) - hash) + char; 
    hash |=  0; 
  } 
  return hash; 
""";

UPDATE `study-in-india-272211.Hashing.Mapping`
set salt = SaltforEmail(Email)
创建临时函数SaltforEmail(s字符串)
返回字符串
语言js为“”
var散列=0;
如果(s.length==0)返回哈希;
对于(i=0;ihash=((hash在此之后添加了一个WHERE子句,并将if改为s!=null。非常感谢。这是一个愚蠢的错误(facepalm)