HiveQL / SQL: В чем разница между CREATE TABLE AS SELECT (CTAS) и CREATE EXTERNAL TABLE + INSERT INTO? - PullRequest
0 голосов
/ 05 февраля 2020

Я знаю два способа создания таблиц, которые, кажется, дают одинаковый результат: таблица. В чем разница между этими двумя методами и какой метод является оптимальным с точки зрения наилучшей практики? Ниже показаны два метода:

Метод 1:

CREATE TABLE db.tablename1 STORED AS ORC AS
SELECT *
FROM db.tablename2;

Метод 2:

CREATE EXTERNAL TABLE IF NOT EXISTS db.tablename1
    id STRING,
    var2 STRING
)
STORED AS ORC
LOCATION '/dir/';

INSERT OVERWRITE TABLE db.tablename1
SELECT * FROM db.tablename2;

Метод 2 требует больше кода и достигает того же результата. Зачем кому-то использовать метод 2? Для контекста, некоторые ученые в моей компании решили создавать таблицы, используя метод 2.

1 Ответ

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

Первый метод - скорее «быстрый и грязный». Он не обеспечивает большого контроля над структурой таблицы, например:

  • Типы данных
  • Значения по умолчанию
  • Дополнительные (не заданные) столбцы
  • Разделение
  • Клавиши кластера
  • Ограничения

Обратите внимание, что некоторые из них могут поддерживаться CTAS (первое решение), но обычно основное внимание уделяется select часть запроса, а не таблица.

Создание сначала таблицы, а затем вставка в нее означает, что таблица может быть полностью определена.

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