相关疑难解决方法(0)

postgres - 比较两个数组

postgres有一个数组数据类型,在本例中是一个数字数组:

CREATE TABLE sal_emp (name text, pay_by_quarter integer[]);
INSERT INTO sal_emp VALUES ('one', '{1,2,3}');
INSERT INTO sal_emp VALUES ('two', '{4,5,6}');
INSERT INTO sal_emp VALUES ('three', '{2,4,6}');
SELECT * FROM sal_emp;

Result:
one, {1,2,3}
two, {4,5,6}
three, {2,4,6}
Run Code Online (Sandbox Code Playgroud)

据我所知,您只能按如下方式查询数组:

SELECT * FROM sal_emp WHERE 4=ANY(pay_by_quarter);
SELECT * FROM sal_emp WHERE ARRAY[4,5,6]=pay_by_quarter;
Run Code Online (Sandbox Code Playgroud)

这意味着您可以选择一个数组包含单个参数匹配的行,或者整个数组是否与数组参数匹配.

我需要选择一行,其中行的数组的任何成员都匹配参数数组的任何成员 - 有点像'IN',但我无法弄清楚如何.我尝试了以下两种方法,但都没有工作:

SELECT * from sal_emp WHERE ARRAY[4,5,6]=ANY(pay_by_quarter);
SELECT * from sal_emp WHERE ANY(pay_by_quarter) IN (4,5,6);
Run Code Online (Sandbox Code Playgroud)

我假设我可以做一些事情将数组转换为字符串,但这听起来像是糟糕的解决方案..

有任何想法吗?

sql arrays postgresql

18
推荐指数
3
解决办法
2万
查看次数

如何在BigQuery中查找数组中的元素

我试图在数组中搜索具有某些键值对的行.我的BigQuery表中的一行看起来像这样.

{
  "ip": "192.168.1.1",
  "cookie" [
    {
      "key": "apple",
      "value: "red"
    },
    {
      "key": "orange",
      "value: "orange"
    },
    {
      "key": "grape",
      "value: "purple"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

我考虑使用隐式UNNEST或CROSS JOIN,如下所示,但它不起作用,因为取消它只会创建多个不同的行.

SELECT ip
FROM table t, t.cookie c
WHERE (c.key = "grape" AND c.value ="purple") AND (c.key = "orange" AND c.value ="orange")
Run Code Online (Sandbox Code Playgroud)

这个链接非常接近我想做的事情,除非它们正在使用legacy SQL而不是standardSQL

sql google-bigquery

9
推荐指数
2
解决办法
1万
查看次数

有没有一种方法可以衡量Google BigQuery中的字符串相似度

我想知道是否有人知道在BigQuery中测量字符串相似度的方法。

似乎将具有一个整洁的功能。

我的情况是我需要比较两个URL的相似性,以确保它们引用同一篇文章。

我可以找到使用javascript的示例,因此也许可以使用UDF,但是我根本没有使用过UDF(或者使用javascript :))

只是想知道是否可以使用现有的regex函数,或者是否有人可以让我开始将javascript示例移植到UDF中。

任何帮助,不胜感激,谢谢

编辑:添加一些示例代码

因此,如果我将UDF定义为:

// distance function

function levenshteinDistance (row, emit) {

  //if (row.inputA.length <= 0 ) {var myresult = row.inputB.length};
  if (typeof row.inputA === 'undefined') {var myresult = 1};
  if (typeof row.inputB === 'undefined') {var myresult = 1};
  //if (row.inputB.length <= 0 ) {var myresult = row.inputA.length};

    var myresult = Math.min(
        levenshteinDistance(row.inputA.substr(1), row.inputB) + 1,
        levenshteinDistance(row.inputB.substr(1), row.inputA) + 1,
        levenshteinDistance(row.inputA.substr(1), row.inputB.substr(1)) + (row.inputA[0] !== row.inputB[0] ? 1 : 0)
    ) + 1; …
Run Code Online (Sandbox Code Playgroud)

javascript regex google-bigquery udf

5
推荐指数
2
解决办法
2354
查看次数

标签 统计

google-bigquery ×2

sql ×2

arrays ×1

javascript ×1

postgresql ×1

regex ×1

udf ×1