如何安全地将sql数组元素卸载到列中?

ewm0tg9j  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(360)

我想了解如何在标准sql(bigquery)中安全地将unnest数组转换为列,即在列中转换列表的每一项。
考虑:

WITH shoppingList AS (
    SELECT 'Bob' AS name, ['bananas', 'olives', 'ham'] AS list
    UNION ALL
    SELECT 'Anna', ['toothpaste', 'shampoo']
)

我可以很容易地查询:

SELECT name, list[OFFSET(0)] as item1, list[OFFSET(1)] AS item2 
FROM shoppingList

然而,当我想查询item3和itemn时,事情变得有点复杂。
由于sql数组元素访问不是一个函数,因此我不能使用 SAFE. 前缀,如果我查询 SELECT list[OFFSET(2)] as item3 FROM shoppingList ,然后用sql抱怨。有没有一种方法可以实现一个安全的等价物,并且在没有找到项时返回null?

6xfqseft

6xfqseft1#

关于第一点,bigquery有一个“safe”函数,这个函数正是为这个场景创建的,safe\u offset。您的“测试”查询将是

WITH shoppingList AS (
    SELECT 'Bob' AS name, ['bananas', 'olives', 'ham'] AS list
    UNION ALL
    SELECT 'Anna', ['toothpaste', 'shampoo']
)

SELECT name, list[SAFE_OFFSET(0)] as item1, list[SAFE_OFFSET(1)] AS item2 , list[SAFE_OFFSET(2)] as item3
FROM shoppingList

相关问题