簡體   English   中英

BIGQUERY 發生內部錯誤,無法完成請求錯誤:80038528

[英]BIGQUERY An internal error occurred and the request could not be completed Error: 80038528

我正在嘗試安裝一個 function。我不明白是什么問題。 我可以在以下情況下正確安裝:

  1. 我刪除了 pivot
  2. 我使用的是表格,而不是unnest (所以從表格中, unnest(a)
CREATE OR REPLACE FUNCTION `dataset.function_naming` (a ARRAY<STRUCT<ROW_ID STRING, KEY STRING, VALUE STRING>>, id_one STRING, id_two STRING, start_date DATE, end_date DATE) RETURNS INT64 
AS (
    with tmp1 as (
            select ROW_ID,X,Y,Z,W
            from 
            (
                select prop.ROW_ID,prop.KEY, prop.VALUE
                from unnest(a) prop
            where prop.KEY in ('X','Y','Z','W')
            )
            
            PIVOT
                (
                    MAX(VALUE) 
                    FOR  UPPER(KEY) in('X','Y','Z','W')
                ) as PIVOT
        )

select case when X is not null then 1,
            when Y is not null then 2,
            when Z is not null then 2,
            when W is not null then 2
       else 0
from tmp1
);

謝謝大家。

我在您的代碼中看到了一些小問題。

  • 在 function 正文周圍缺少額外的(...)
  • case 語句中的額外逗號 ( , )

所以,試試下面

CREATE OR REPLACE FUNCTION `dataset.function_naming` (
    a ARRAY<STRUCT<ROW_ID STRING, KEY STRING, VALUE STRING>>, 
    id_one STRING, 
    id_two STRING, 
    start_date DATE, 
    end_date DATE
) RETURNS INT64 
AS ((
    with tmp1 as (
            select ROW_ID,X,Y,Z,W
            from 
            (
                select prop.ROW_ID,prop.KEY, prop.VALUE
                from unnest(a) prop
            where prop.KEY in ('X','Y','Z','W')
            )
            
            PIVOT
                (
                    MAX(VALUE) 
                    FOR  UPPER(KEY) in('X','Y','Z','W')
                ) as PIVOT
        )

select case when X is not null then 1
            when Y is not null then 2
            when Z is not null then 2
            when W is not null then 2
       else 0
       end 
from tmp1
));

Seams 在數組上使用pivotsunnest時存在內部問題。 您可以使用以下執行相同邏輯的命令,還可以創建一個問題跟蹤器案例,作為 Google 雲支持的 BigQuery 問題。

CREATE OR REPLACE FUNCTION `<dataset>.function_naming` (
    a ARRAY<STRUCT<ROW_ID STRING, KEY STRING, VALUE STRING>>, 
    id_one STRING, 
    id_two STRING, 
    start_date DATE, 
    end_date DATE
) RETURNS INT64 
AS (( WITH tmp AS (
  SELECT
    CASE
      WHEN KEY="X" THEN 1
      WHEN KEY="Y" THEN 2
      WHEN KEY="Z" THEN 2
      WHEN KEY="W" THEN 2
    ELSE
    0
  END
    teste_column
 #-- FROM ( SELECT UPPER(prop.KEY) KEY, MAX(prop.VALUE) VALUE FROM -- following your query patern, but not really necessary
  FROM ( SELECT UPPER(prop.KEY) KEY  FROM
      UNNEST(a) prop
    WHERE
      UPPER(key) IN ('X', 'Y', 'Z', 'W')
    GROUP BY key )
  ORDER BY teste_column DESC LIMIT 1 )
SELECT * FROM tmp
UNION ALL
SELECT 0 teste_column
FROM (SELECT 1)
LEFT JOIN tmp
ON FALSE
WHERE NOT EXISTS ( SELECT 1 FROM tmp)
));

#--- Testing the function:
select `<project>.<dataset>.function_naming`([STRUCT("1" AS ROW_ID, "x" AS KEY, "10"AS VALUE), STRUCT("1" AS ROW_ID, "x" AS KEY, "20"AS VALUE), STRUCT("1" AS ROW_ID, "w" AS KEY, "20"AS VALUE), STRUCT("1" AS ROW_ID, "y" AS KEY, "20"AS VALUE)], "1", "2", "2022-12-10", "2022-12-10")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM