国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Hive編程指南03---Hive數據表

2019-11-06 06:14:50
字體:
來源:轉載
供稿:網友

Hive數據表

1.創建數據表

    CREATE TABLE IF NOT EXISTS <database>.<table>

        name STRING COMMENT 'name',

        salary FLOAT COMMENT 'salary',

        subordinates ARRAY<STRING> COMMENT 'Names of subordinates',

        deductions MAP<STRING, FLOAT> COMMENT 'Keys are deductions names, values are percentages',

        address STRUCT<street:STRING, city:STRING, state:STRING, zip:INT> COMMENT ''Home address)

    COMMENT 'Description of the table'

    TBLPROPERTIES ('creator'='me', 'created_at'='2012-01-02',...)

    LOCATION '/user/hive/warehosue/mydb.db/...';

2.查找表

    SHOW TABLES IN <database>;

    SHOW TABLES '前綴.*'; //正則過濾表名

    注:IN <database>和表名正則表達式不能同時使用

3.查看表的詳細表結構

    DESCRIBE EXTENDED <database>.<table>; //FORMATTED比EXTENDED內容更詳細

4.創建外部表

    CREATE EXTERNAL TABLE IF NOT EXISTS <table>//外部表關鍵字

    LOCATION '/目錄';//Hive數據目錄位置

    注:刪除該表不會刪除掉這份數據(HDFS目錄下還有這批數據),不過描述表的元數據信息會被刪除

5.拷貝表

    CREATE EXTERNAL TABLE IF NOT EXISTS <database>.<new_table>

    LIKE <database>.<old_table>

    無EXTERNAL關鍵字且源表為外部表,新表為外部表

    無EXTERNAL關鍵字且源表為內部表,新表為內部表

    有EXTERNAL關鍵字且源表為內部表,新表為外部表

6.分區表

    CREATE TABLE <table>(...)

    PARTITIONED BY (分區1 數據類型, 分區2 數據類型);

7.分區表全表查詢

    set hive.mapred.mode=strict; //禁止提交WHERE沒有加分區過濾的查詢

    set hive.mapred.mode=nonstrict; //允許提交WHERE沒有加分區過濾的查詢

8.查詢分區

    SHOW PARTITIONS <table> PARTITION(分區='分區值');

9.外部分區表

    CREATE EXTERNAL TABLE IF NOT EXISTS log_messages(

        hms INT,

        severity STRING,

        server STRING,

        process_id INT,

        message STRING)

    PARTITIONED BY (year INT, month INT, day INT)

    ROW FORMAT DELIMITED FIELDS TERMINATED BY '/t';

    //增加一個分區

    ALTER TABLE log_messages ADD PARTITION(year = 2012, month = 1,day =  2)

    LOCATION 'hdfs://master_server/data/log_message/2012/1/2';

    //在廉價機上轉移舊數據

    //a.將分區下的數據拷貝到S3中,例如,用戶可以使用hadoop distcp命令:

    hadoop distcp /data/log_message/2011/12/02 s3n://ourbucket/logs/2011/12/02

    //b.修改表,將分區路徑指向到S3路徑:

    ALTER TABLE log_messages PARTITION(year = 2011,month = 12 day = 2)

    SET LOCATION 's3n://ourbucket/logs/2011/12/02'

    //c.使用hadoop fs -rmr 命令刪除掉HDFS中的這個分區數據:

    hadoop fs -rmr /data/log_messages/2011/01/02

10.自定義表的存儲格式

    STORED AS TEXTFILE; //每一行被認為是一個單獨的記錄

11.刪除表

    DROP TABLE IF EXISTS <table>;

12.修改表

    a.表重命名

        ALTER TABLE <old_table> RENAME TO <new_table>

    b.增加、修改、刪除表分區(通常外部表)

        ALTER TABLE <table> ADD IF NOT EXISTS

        PARTITION (year = 2011, month = 1, day = 1) LOCATION '/logs/2011/01/01'

        PARTITION (year = 2011, month = 1, day = 2) LOCATION '/logs/2011/01/02'

        PARTITION (year = 2011, month = 1, day = 3) LOCATION '/logs/2011/01/03'

        //同時,可以通過移動位置來修改某個分區的路徑

        ALTER TABLE <table> PARTITION(year = 2011, month = 12, day = 2)

        SET LOCATION 's3n://ourbucket/logs/2011/01/02';

        //不會將數據從舊的路徑轉走,也不會刪除舊的數據,可以通過DROP PARTITION刪除分區;外部表分區內的數據不會被刪除

        ALTER TABLE <table> DROP IF EXISTS PARTITION(year = 2011, month = 12, day = 2);

    c.修改列信息

        ALTER TABLE <table>

        CHANGE COLUMN <old_column> <new_column> <new_column_dataType>

        COMMENT 'comment'

        AFTER/FIRST <other_column>; //移動字段位置,AFTER之后,FIRST之前

    d.增加列

        ALTER TABLE <table> ADD COLUMNS(

            new_column new_column_dataType COMMENT 'comment',

            new_column new_column_dataType COMMENT 'comment');

    e.刪除或者替換列

        //移除之前所有的字段并重新指定了新的字段;移除了server和process_id,只有表的元數據信息改變了,不會修改數據

        ALTER TABLE <table> REPLACE COLUMNS(

            hours_mins_secs INT COMMENT 'comment',

            severity STRING COMMENT 'comment'

            message STRING COMMENT 'comment');

    f.修改表屬性

        //可以增加附加的表屬性或者修改已經存在的屬性,但是無法刪除屬性:

        ALTER TABLE <table> SET TBLPROPERTIES(

            'notes' = '....');

    g.修改存儲屬性

        ALTER TABLE <table>

        PARTITION(year = 2012, month = 1, day  = 1)

        SET FILEFORMAT SEQUENCEFILE;

        //如果是分區表,需要使用PARTITION子句

        ALTER TABLE <table>

        SET SERDE 'com.example.JSONSerDe'

        WITH SERDEPROPERTIES(

            'prop1' = 'value1',

            'prop2' = 'value2');

    h.其他修改語句

        //執行鉤子:表中存儲的文件在Hive之外被修改,觸發鉤子的執行

        ATLER TABLE <table> TOUCH PARTITION();

        //若表或分區不存在,鉤子執行不會創建表或者分區,需要其他策略

        //將這個分區內的文件打包成一個Hadoop壓縮包(HAR)文件,僅僅降低了文件系統中的文件數以及減輕NameNode的壓力,不會減少任何存儲空間

        ALTER TABLE <table> ARCHIVE PARTITION();//反向操作UNARCHIVE,只適用于表的獨立分區

        //防止分區被刪除和被查詢,DISABLE反向操作

        ALTER TABLE <table> PARTITION() ENABLE NO_DROP;

        ALTER TABLE <table> PARTITION() ENABLE OFFLINE;


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 铁岭市| 枣庄市| 鹿邑县| 瓦房店市| 额尔古纳市| 马关县| 涟水县| 山东省| 海淀区| 邹平县| 花莲县| 嵩明县| 婺源县| 阿拉善左旗| 宜城市| 齐河县| 枞阳县| 广丰县| 河池市| 德州市| 余庆县| 天镇县| 淅川县| 钟祥市| 邢台市| 武陟县| 南漳县| 石狮市| 西盟| 普安县| 玉屏| 嘉善县| 漳州市| 井冈山市| 台中市| 凤翔县| 嘉义县| 五寨县| 汾西县| 桓台县| 英超|