BigQuery - несовместимый тип в UNION ALL?-- Сводит меня с ума - PullRequest
0 голосов
/ 25 июня 2018

Ниже приведена упрощенная версия моего запроса.DebugReason в таблице Debug имеет тип INTEGER, а DebugData имеет тип STRING.И в таблице GPS нет таких двух полей, поэтому я подделал их со всеми NULL.Причина, по которой мне нужно это сделать, не относится к этой проблеме, короче говоря, она мне нужна в следующем процессе

 WITH RawDebug as 
(
  SELECT 
  STRUCT(DebugReason,DebugData) as Debug
  FROM `devicedata.Debug.T*`
  WHERE _TABLE_SUFFIX="20180624"

),
RawGPS AS (        
       SELECT
          STRUCT(null as DebugReason,null as DebugData) as Debug
        FROM
          `devicedata.Gps.T*` AS g
         WHERE _TABLE_SUFFIX="20180624"

)
select Debug
from RawDebug
UNION ALL
select Debug
from RawGPS

BigQuery говорит:

Error: Column 1 in UNION ALL has incompatible types: STRUCT<DebugReason INT64, DebugData STRING>, STRUCT<DebugReason INT64, DebugData INT64> at [18:1]

Я не могуразберись, что не так ... И как сделать это правильно?

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Другой вариант - явно указать STRUCT, как показано ниже

WITH RawDebug AS 
(
  SELECT 
  STRUCT(DebugReason,DebugData) AS Debug
  FROM `devicedata.Debug.T*`
  WHERE _TABLE_SUFFIX="20180624"
),
RawGPS AS (        
       SELECT
          STRUCT<DebugReason INT64, DebugData STRING>(NULL, NULL) AS Debug
        FROM
          `devicedata.Gps.T*` AS g
         WHERE _TABLE_SUFFIX="20180624"
)
SELECT Debug
FROM RawDebug
UNION ALL
SELECT Debug
FROM RawGPS
0 голосов
/ 25 июня 2018

В одном из запросов в объединении поле DebugData имеет тип STRING, а в другом - INT64.Если вам нужен согласованный тип, вам нужно привести:

WITH RawDebug as 
(
  SELECT 
  STRUCT(DebugReason,DebugData) as Debug
  FROM `devicedata.Debug.T*`

),
RawGPS AS (        
       SELECT
          STRUCT(
            null as DebugReason,
            CAST(DebugData AS STRING) AS DebugData -- note the cast
          ) as Debug
        FROM
          `devicedata.Gps.T*` AS g

)
select Debug
from RawDebug
UNION ALL
select Debug
from RawGPS

Это происходит потому, что тип NULL по умолчанию INT64.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...