1、創建數據庫 建一個數據庫exchange_platform。 DROP DATABASE IF EXISTS exchange_platform CASCADE; CREATE DATABASE IF NOT EXISTS exchange_platform; 2、刪除數據庫 DROP DATABASE IF EXISTS exchange_platform; 3、修改 DBPROPERTIES ALTER DATABASE exchange_platform SET DBPROPERTIES ('date'= '2015-12'); 4、修改數據庫owner ALTER DATABASE exchange_platform SET OWNER USER alice; 數據庫owner可以是Inceptor的用戶也可以是角色。 5、創建表 5.1、通過定義列建表 -- 將表建在當前數據庫中: DROP TABLE IF EXISTS user_info_tab; CREATE TABLE user_info_tab ( name STRING, acc_num STRING, password STRING, citizen_id STRING, bank_acc STRING, reg_date DATE, acc_level STRING ); -- 將表建在指定數據庫中: DROP TABLE IF EXISTS exchange_platform.user_info; CREATE TABLE exchange_platform.user_info ( name STRING, acc_num STRING, password STRING, citizen_id STRING, bank_acc STRING, reg_date DATE, acc_level STRING ); -- 建HDFS外表: DROP TABLE IF EXISTS user_info_tab; CREATE EXTERNAL TABLE user_info_tab ( name STRING, acc_num STRING, password STRING, citizen_id STRING, bank_acc STRING, reg_date DATE, acc_level STRING ); LOAD DATA LOCAL INPATH '/LOCALWORKSPACE/manual-ut/manual_data/manual_crud_tmp/user_info.txt' OVERWRITE INTO TABLE user_info_tab; 5.2、通過拷貝表定義建表 DROP TABLE IF EXISTS exchange_platform.user_info; CREATE TABLE IF NOT EXISTS exchange_platform.user_info LIKE user_info; 5.3、CTAS --用user_info表做為例子,user_info中含有帳戶密碼,身份證號碼和銀行帳戶等會影響帳戶安全的信息,現在用 CTAS 建一張不包含這些信息的表。 DROP TABLE IF EXISTS nonsecure_user_info ; CREATE TABLE nonsecure_user_info AS SELECT name, acc_num, reg_date, acc_level FROM user_info; 6、刪除表 DROP TABLE [IF EXISTS] <table_name>; 7、修改表 7.1 重命名 ALTER TABLE <table_name> RENAME TO <new_table_name>; 7.2 修改或添加TBLPROPERTIES -- 我們可以用這個語句給表添加和修改自定義的表屬性。 ALTER TABLE <table_name> SET TBLPROPERTIES ('<property_name>' = '<property_value>' ... ); 7.3 修改或添加SERDEPROPERTIES ALTER TABLE <table_name> SET SERDEPROPERTIES ('<property_name>' = '<property_value>' ... ); 7.4 修改外表目錄 ALTER TABLE <table_name> SET LOCATION '<new_location>'; -- 將外表指向的HDFS目錄改為 <new_location>。注意,執行該操作的用戶必須是 <new_location> 的owner 8、清空表 -- TRUNCATE TABLE 清空表或者分區中的數據,但不刪除表或分區的元數據。這個操作只能用於托管表,不能用於外表。 8.1 清空表中數據 TRUNCATE TABLE user_info; 8.2 清空指定表中指定分區的數據 TRUNCATE TABLE user_info_part PARTITION (acc_level='A'); 9、增加替換列 9.1 增加列 -- 可以將新的列加入表中,位置在所有列之后,分區之前。 DROP TABLE IF EXISTS test_change; CREATE TABLE test_change (a INT, b INT, c INT); -- 在表test_change中添加一個新列d,類型為INT ALTER TABLE test_change ADD COLUMNS(d INT); 9.2 替換列 DROP TABLE IF EXISTS test_change; CREATE TABLE test_change (a INT, b INT, c INT); -- 將test_change中的列由(a INT, b INT, c INT)替換為(a int, b int)起到將列c刪除的效果 ALTER TABLE test_change REPLACE COLUMNS (a INT, b INT); 10、視圖 10.1創建視圖 DROP VIEW IF EXISTS non_secure_info; CREATE VIEW non_secure_info AS SELECT name, reg_date, acc_level FROM user_info; -- 注意:不支持CREATE VIEW AS SELECT … UNION SELECT 10.2 刪除視圖 DROP VIEW [IF EXISTS] <view_name>; 11、導入數據 -- 將本地數據導入一張表 LOAD DATA LOCAL INPATH '/LOCALWORKSPACE/manualut/manual_data/manual_crud_tmp/user_info_table.txt' INTO TABLE user_info2; -- 將本地數據導入一張表下的分區 LOAD DATA LOCAL INPATH '/LOCALWORKSPACE/manualut/manual_data/manual_crud_tmp/user_info_table_A.txt' INTO TABLE partition_user_info PARTITION (acc_level = 'A'); -- 將HDFS上的數據導入一張表 LOAD DATA INPATH '/manual_crud_hdfs/user_info3/test' INTO TABLE user_info2; 12、向表中插入數據 -- 一些常見的DML如 UPDATE, DELETE和 INSERT … VALUES只能對ORC事務表、Hyperbase內存表、ES 表使用。 -- 而INSERT … SELECT、SELECT則可以作用於任意類型的表 12.1 向表中插入數據並覆蓋原數據 INSERT OVERWRITE TABLE user_info2 SELECT * FROM user_info; 12.2 多次插入 -- 使用一個數據源可以將多個查詢結果插入不同表中。語法 FROM user_info INSERT INTO TABLE user_name SELECT name n INSERT OVERWRITE TABLE user_name_num SELECT name, acc_num ac INSERT INTO TABLE user_name_level SELECT name, acc_level; 13、向文件系統中插入數據 -- 寫入文件系統使用INSERT語句,但是不同於將數據INSERT進表中有INTO和OVERWRITE兩種選項,將數據寫入文件系統必須INSERT OVERWRITE。 13.1 將user_info中的內容寫入本地某目錄下。 INSERT OVERWRITE LOCAL DIRECTORY '/LOCALWORKSPACE/manual-ut/manual_data/user_info2/' ROW FORMAT DELIMITED FIELDS TERMINATED BY'|' SELECT * FROM user_info; 13.2 將user_info中的內容寫入HDFS上的目錄下 INSERT OVERWRITE DIRECTORY '/manual_crud_hdfs/user_info2/' ROW FORMAT DELIMITED FIELDS TERMINATED BY'|' SELECT * FROM user_info; 13.3 多插入 --在Inceptor中還可以用一個SQL語句將從一個數據源中檢索出來的多個結果插入不同文件和表中。 FROM user_info INSERT OVERWRITE LOCAL DIRECTORY '/LOCALWORKSPACE/manual-ut/manual_data/user_info4/'SELECT name a INSERT OVERWRITE DIRECTORY '/manual_crud_hdfs/user_info5/'SELECT password b INSERT INTO TABLE new_user SELECT name c INSERT OVERWRITE TABLE user_name SELECT name d; 14、TEXT表 DROP TABLE IF EXISTS employee; CREATE EXTERNAL TABLE employee (id INT, name STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LOCATION '/manual_crud_tmp/employee'; SELECT * FROM employee; 15、CSV表 DROP TABLE IF EXISTS csv_table; CREATE EXTERNAL TABLE csv_table ( col1 STRING, col2 STRING, col3 STRING ) STORED AS CSVFILE; LOAD DATA LOCAL INPATH '/LOCALWORKSPACE/manual-ut/manual_data/manual_crud_tmp/csv1.txt' OVERWRITE INTO TABLE csv_table; 16、ORC表 SET transaction.type=inceptor; -- 創建非分區ORC表。 DROP TABLE IF EXISTS ta; CREATE TABLE ta (name STRING, age INT) CLUSTERED BY (age) INTO 2 BUCKETS STORED AS ORC TBLPROPERTIES ("transactional"="true"); -- 創建非分區ORC表。 DROP TABLE IF EXISTS tg; CREATE TABLE tg (name STRING, gpa DOUBLE) CLUSTERED BY (name) INTO 4 BUCKETS STORED AS ORC TBLPROPERTIES ("transactional"="true"); -- 創建單值分區ORC表。 DROP TABLE IF EXISTS test; CREATE TABLE test (a INT, b STRING, c DOUBLE) PARTITIONED BY (date STRING) CLUSTERED BY (c) INTO 8 BUCKETS STORED AS ORC TBLPROPERTIES ("transactional"="true"); -- 創建范圍分區ORC表。 DROP TABLE IF EXISTS t5; CREATE TABLE t5(id INT, value INT) PARTITIONED BY RANGE(amount INT) ( PARTITION less1 VALUES LESS THAN (1), PARTITION less10 VALUES LESS THAN (10), PARTITION less100 VALUES LESS THAN (100) ) CLUSTERED BY (id) INTO 5 BUCKETS STORED AS ORC TBLPROPERTIES ("transactional"="true"); -- 桶的個數對事務處理的性能有關鍵性的影響,我們建議您設置合理的個數, -- 一般是CPU個數的倍數,並且每個桶平均的大小控制不要超過200MB或者一百萬行記錄。 17、Holodesk表 --Holodesk普通建表 DROP TABLE IF EXISTS holodeskEmployee; CREATE TABLE holodeskEmployee( ID INT, Region STRING, Sex VARCHAR(4), Department STRING, Salary DECIMAL ) STORED AS HOLODESK;
