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
是的,根据文档,LOCATION 子句意味着 EXTERNAL,因此可以在不显式插入 Spark 的情况下读取新数据。话虽如此,您可能需要刷新缓存才能让元存储读取更新的信息。