Схема настройки паркетного стола CTAS в сеялке apache: требуется дополнительный элемент вместо дополнительного - PullRequest
0 голосов
/ 06 февраля 2020

Я хотел бы создать файл паркета с очень специфической c схемой, используя сверло apache. Я объединяю две таблицы с CTAS, например:

CREATE TABLE synthetic1 AS (
  SELECT e1.returneddocids AS returneddocids, e1.pathinfo AS pathinfo, c1.counters AS counters
  FROM dfs.`/tmp/tier1.parquet` e1 LEFT JOIN dfs.tmp.shadow3 c1 ON TRUE LIMIT 100
);

Полученная схема файла выглядит следующим образом:

message root {
  optional group returneddocids {
    repeated group list {
      optional binary element (UTF8); // need this one as required, not optional
    }
  }
  optional binary pathinfo (UTF8);
  optional group counters {
    repeated group list {
      optional group element {        // need this as required
        optional binary name (UTF8);  // need this as required
        optional int32 value;         // need this as required
      }
    }
  }
}

Интересно, как настроить запрос CTAS, чтобы optional элементы, указанные выше, были изменены до required?

1 Ответ

0 голосов
/ 06 февраля 2020

Это довольно запутанно, вы можете использовать СОЗДАТЬ ИЛИ ЗАМЕНИТЬ СХЕМУ , чтобы применить ограничения. В моем случае этот вид работ (не совсем, хотя может быть полезен для других, сталкивающихся с подобной проблемой):

ALTER SESSION SET `store.table.use_schema_file` = true;
ALTER SESSION SET `exec.storage.enable_v3_text_reader` = true;
CREATE OR REPLACE SCHEMA (
  returneddocids STRUCT<`list` STRUCT<`element` ARRAY<VARCHAR>>> NOT NULL,
  pathinfo VARCHAR NOT NULL,
  counters STRUCT<`list` STRUCT<`element` ARRAY<VARCHAR>>>
) FOR TABLE synthetic1;
...