В чем разница между CREATE TABLE tblname AS SELECT ... и CREATE TABLE tblname (....) с использованием <format>LOCATION '...' - PullRequest
1 голос
/ 11 января 2020
The table data path: /mnt/data/account_transactions
Database: office
Table (to be created): ACCOUNT_TRANS (Accounts Transactions)

Может ли кто-нибудь подтвердить, правильно ли я понимаю, иначе объясните различия между двумя подходами.

Подход 1)

CREATE TABLE office.account_trans
AS
SELECT * FROM parquet.`/mnt/data/account_transactions`

Подход 2) Если мы знаем поля в account_trans: AccountId, AccountName, TransactionAmt, BalanceAmt

CREATE TABLE office.account_trans (
  AccountId STRING, 
  AccountName STRING, 
  TransactionAmt DOUBLE, 
  BalanceAmt DOUBLE
)
USING parquet
LOCATION '/mnt/data/account_transactions'

Мое понимание: Подход 1) Здесь сначала выполняется запрос Select, а затем создается таблица по результату только что выполненный запрос на выборку.

Таким образом, любые новые записи, добавленные в / mnt / data / account_transactions, не будут отражены в таблице office.account_trans.

Подход 2) Поскольку здесь мы дали Предложение LOCATION как / mnt / data / account_transactions, поэтому любые новые добавления / удаления / обновления будут отражены в office.account_trans

1 Ответ

1 голос
/ 11 января 2020

Да, согласно документации, условие LOCATION подразумевает EXTERNAL, поэтому новые данные могут быть прочитаны без явной вставки их в Spark. При этом вам, возможно, потребуется обновить sh кэш, чтобы метастроение считывало обновленную информацию.

...