• Hive External Table 外部表


    Hive 的外部表与内部表区别

    1. 在导入数据到外部表,数据导入到建表语句中 LOCATION 参数指定的 HDFS 目录下即可;
    2. 删除表的时候,Hive 会将表的元数据信息删除掉,但导入的数据信息是不会被删除的;

    Hive 外部表示例

    1)创建外部表

    创建的时候用 LOCATION 指定原数据存储的路径,不指定的话 hive 会在 /usr/hive/warehouse 下以外部表的表名创建目录并将数据存储在这里

    创建表

    $ CREATE EXTERNAL TABLE t_external (year string, month int, num int)

            ROW FORMAT DELIMITED

            FIELDS TERMINATED BY ','

            LOCATION '/user/test/t_extends'

    此时在 HDFS 上创建了空目录 /user/test/t_extends

    同时,在 MySQL 中记录的 Hive 元数据中添加了表的信息:

    mysql > select * from TBLS\G;

    1. *************************** 5. row ***************************
    2. TBL_ID: 21
    3. CREATE_TIME: 1663561577
    4. DB_ID: 1
    5. LAST_ACCESS_TIME: 0
    6. OWNER: hadoop
    7. OWNER_TYPE: USER
    8. RETENTION: 0
    9. SD_ID: 21
    10. TBL_NAME: t_external
    11. TBL_TYPE: EXTERNAL_TABLE
    12. VIEW_EXPANDED_TEXT: NULL
    13. VIEW_ORIGINAL_TEXT: NULL
    14. IS_REWRITE_ENABLED:
    15. 5 rows in set (0.00 sec)

    数据文件 t_extends.txt

    $ vim t_extends.txt

    1. 2019,02,15
    2. 2020,10,01
    3. 2021,03,19
    4. 2022,01,10
    5. 2022,03,21
    6. 2022,09,19

    加载数据

    可用:

    $ hdfs dfs -put t_extends.txt /user/test/t_extends

    也可以用:

    hive> load data local inpath '/home/centosm/test/hive' into table t_external

    加载数据后文件被导入到 /user/test/t_extends/ 目录下:

    $ hdfs dfs -ls /user/test/t_extends/

    1. Found 1 items
    2. -rw-r--r-- 3 hadoop supergroup 66 2022-09-19 14:18 /user/test/t_extends/t_extends.txt

    文件内容

    $ hdfs dfs -cat /user/test/t_extends/t_extends.txt

    1. 2022-09-19 14:43:42,163 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
    2. 2019,02,15
    3. 2020,10,01
    4. 2021,03,19
    5. 2022,01,10
    6. 2022,03,21
    7. 2022,09,19

    在 hive 中查询 t_external 表

    hive> select * from t_external;

    1. OK
    2. 2019 2 15
    3. 2020 10 1
    4. 2021 3 19
    5. 2022 1 10
    6. 2022 3 21
    7. 2022 9 19
    8. Time taken: 3.177 seconds, Fetched: 6 row(s)

    查询外部表中的文件路径

    hive> select INPU__FILE__NAME form t_external;

    1. OK
    2. hdfs://mycluster/user/test/t_extends/t_extends.txt
    3. hdfs://mycluster/user/test/t_extends/t_extends.txt
    4. hdfs://mycluster/user/test/t_extends/t_extends.txt
    5. hdfs://mycluster/user/test/t_extends/t_extends.txt
    6. hdfs://mycluster/user/test/t_extends/t_extends.txt
    7. hdfs://mycluster/user/test/t_extends/t_extends.txt
    8. Time taken: 0.213 seconds, Fetched: 6 row(s)

    删除表

    如果删除表,表的元信息被删除,因为是外部表,数据文件没有被删除:

    hive> drop table t_external;

    MySQL 中元数据被删除:

    mysql> select * from TBLS where TBL_NAME='t_external';

    Empty set (0.00 sec)

    数据文件还在:

    $ hdfs dfs -ls /user/test/t_extends/

    1. Found 1 items
    2. -rw-r--r-- 3 hadoop supergroup 66 2022-09-19 14:18 /user/test/t_extends/t_extends.txt

  • 相关阅读:
    安装semantic segmentation editor
    UE4/5中数组TArray
    【软考学习12】页式存储、段式存储、段页式存储和物理逻辑地址转换
    (四)RabbitMQ安装
    带你读论文丨Fuzzing漏洞挖掘详细总结 GreyOne
    解密代理技术:保障隐私与网络安全
    第十周周报
    TikTok怎么开启社交电商?
    2024华为OD机试真题-伐木工-(C++/Python)-C卷D卷-200分
    Kotlin高仿微信-第14篇-单聊-视频通话
  • 原文地址:https://blog.csdn.net/zhy0414/article/details/126948894