Hive 数据类型及数据表操作

1) 数据类型

    int
    bigint   ===> long
    float 
    double
    string
    boolean   TRUE/FALSE  ==> 生产用1/0替换,明显提升性能
    date/timestamp   用string替换 

    decimal    精度很高,银行用到

    生产上基本就用这两大类:数值/字符串  数值用于统计,其他均为字符串


2) 分隔符

    \n               行与行之间的分隔符   默认
    \001  ^A     列与列之间的分割符   采用:\t  " " $$$ 等
    \002  ^B     数组与结构体             
    \003  ^C     map

    如:   zhangsan,30,shanghai


3) 表操作

    1. 创建表操作

        CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name   
            -- (Note: TEMPORARY available in Hive 0.14.0 and later)
            [(col_name data_type [COMMENT col_comment], ... [constraint_specification])]
            [COMMENT table_comment]
            [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
            [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
            [SKEWED BY (col_name, col_name, ...)                  -- (Note: Available in Hive 0.10.0 and later)]
                 ON ((col_value, col_value, ...), (col_value, col_value, ...), ...)
             [STORED AS DIRECTORIES]
             [
               [ROW FORMAT row_format] 
               [STORED AS file_format]
                 | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)] 
                      -- (Note: Available in Hive 0.6.0 and later)
              ]
              [LOCATION hdfs_path]
              [TBLPROPERTIES (property_name=property_value, ...)]   -- (Note: Available in Hive 0.6.0 and later)
              [AS select_statement];   -- (Note: Available in Hive 0.5.0 and later; not supported for external tables)

    例:

        ① CREATE TABLE emp (
                empno int,
                ename string,
                job string,
                mgr int,
                hiredate string,
                salary double,
                comm double,
                deptno int
            ) ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";
            LOAD DATA LOCAL INPATH "/home/hadoop/data/emp.txt" OVERWRITE INTO TABLE emp;
        ② CREATE TABLE ruoze_emp2 LIKE emp;    // 不拷贝数据

        ③ CREATE TABLE ruoze_emp3 AS select * from emp;    // 不拷贝数据    


    2. 修改表操作

        ALTER TABLE table_name RENAME TO new_table_name;


    3. 删除表操作

        DROP TABLE [IF EXISTS] table_name [PURGE];     -- (Note: PURGE available in Hive 0.14.0 and later)


4) 内部表 VS 外部表 (MANAGED_TABLE vs EXTERNAL)

    1. 删除

        MANAGED_TABLE  删除的时候,HDFS+META都会被删除

        EXTERNAL_TABLE   删除的时候,只删除META信息

            Q:为什么建议使用EXTERNAL?

            A:从安全性来讲,外部表更合适。生产上所有的日志表都是外部表,drop掉的只是元数据。

            A:Hive+Sentry整合,可以设置访问权限。

    

    2. 数据备份/移动

        hadoop一般只保存最近的数据,过了这个时间会移动其他地方(s3),所以meta信息随之要发生变化,即移动数据的同时要把meta数据一并改掉。就算移动s3,也可以直接查。

        数据备份/移动,涉及到很多调整,典型的就是meta信息。

        比如:移动了文件,即需要修改TBLS的Location。

    

    

猜你喜欢

转载自blog.csdn.net/qq_30130043/article/details/80470968