当前位置:   article > 正文

HIVE 学习笔记之创建表和查询biao_hive 给定表结构 创建内部表 查询前五行

hive 给定表结构 创建内部表 查询前五行

鸣谢:

      本笔记中不论测试数据还是使用方式都参考了下面几位博主的博客内容,故本文只作为个人学习记录。

       https://blog.csdn.net/zimou5581/article/details/82383906 

       https://blog.csdn.net/u010003835/article/details/80671367

       https://community.hortonworks.com/questions/68783/destination-table-is-stored-as-orc-but-the-file-be.html

背景:

     小白最近开始接触hadoop生态中的hive,于是乎就开始了胡胡咧咧的hive学习史 

建表:

     hive 建表分为内部表(没有external)和外部表 (有external)

数据准备:

  1、 通过 vi /home/hive/mytest01.txt创建数据文件,内容如下:

1,xiaoming,book-TV-code,beijing:chaoyang-shagnhai:pudong

  2、通过 hdfs dfs -put /home/hive/mytest01.txt /tmp/hive/ 将上述准备的数据上传到hdfs

3、可以通过 hdfs dfs -cat /home/hive/mytest01.txt 来查看hdfs中的文件

 建表:

 1、可以通过beeline 工具来操作hive(该工具在hive1.14开始已集成)

  1. Usage: java org.apache.hive.cli.beeline.BeeLine
  2. -u <database url> the JDBC URL to connect to
  3. -n <username> the username to connect as
  4. -p <password> the password to connect as
  5. -d <driver class> the driver class to use
  6. -i <init file> script file for initialization
  7. -e <query> query that should be executed
  8. -f <exec file> script file that should be executed
  9. -w (or) --password-file <password file> the password file to read password from
  10. --hiveconf property=value Use value for given property
  11. --hivevar name=value hive variable name and value
  12. This is Hive specific settings in which variables
  13. can be set at session level and referenced in Hive
  14. commands or queries.
  15. --color=[true/false] control whether color is used for display
  16. --showHeader=[true/false] show column names in query results
  17. --headerInterval=ROWS; the interval between which heades are displayed
  18. --fastConnect=[true/false] skip building table/column list for tab-completion
  19. --autoCommit=[true/false] enable/disable automatic transaction commit
  20. --verbose=[true/false] show verbose error messages and debug info
  21. --showWarnings=[true/false] display connection warnings
  22. --showNestedErrs=[true/false] display nested errors
  23. --numberFormat=[pattern] format numbers using DecimalFormat pattern
  24. --force=[true/false] continue running script even after errors
  25. --maxWidth=MAXWIDTH the maximum width of the terminal
  26. --maxColumnWidth=MAXCOLWIDTH the maximum width to use when displaying columns
  27. --silent=[true/false] be more silent
  28. --autosave=[true/false] automatically save preferences
  29. --outputformat=[table/vertical/csv2/tsv2/dsv/csv/tsv] format mode for result display
  30. Note that csv, and tsv are deprecated - use csv2, tsv2 instead
  31. --truncateTable=[true/false] truncate table column when it exceeds length
  32. --delimiterForDSV=DELIMITER specify the delimiter for delimiter-separated values output format (default: |)
  33. --isolation=LEVEL set the transaction isolation level
  34. --nullemptystring=[true/false] set to true to get historic behavior of printing null as empty string
  35. --addlocaldriverjar=DRIVERJARNAME Add driver jar file in the beeline client side
  36. --addlocaldrivername=DRIVERNAME Add drvier name needs to be supported in the beeline client side
  37. --help display this message

2、采用命令 beeline -r -n hive -p hive 进入hive CUL操作界面 (鉴于记录jdbc url 地址复杂,可以直接通过 beeline 执行一次后使用该命令,可以省略记录地址的问题,因为该命令中的-r 就是使用上一次链接时的url):

建内部表:

1、 create table mytable(id int,name string,hobby array<string>,add map<string,string>) row format delimited fields terminated by ',' collection items terminated by '-' map keys terminated by ':' STORED AS TEXTFILE ;

2、通过 select * from mytable;

3、通过 load data -inpath /tmp/hive/mytest01.txt OVERWRITE INTO TABLE mytable; 导入数据

4、导入成功后通过步揍2查询

 5、通过 desc formatted mytable4 ;查看明细

建外部表:

1、create external table mytable4(id int,name string,hobby array<string>,add map<string,string>) row format delimited fields terminated by ',' collection items terminated by '-' map keys terminated by ':' location '/tmp/hive/mytabl' ;

2、通过load data inpath '/tmp/hive/mytest01.txt' OVERWRITE INTO TABLE mytable4; 导入数据.

3、外部表在hdfs中的存储。

4、通过  desc 查看desc formatted mytable4;

 

区别:

未被external修饰的是内部表(managed table),被external修饰的为外部表(external table); 
区别: 
内部表数据由Hive自身管理,外部表数据由HDFS管理; 
内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己制定; 
删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除; 
对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)

比对:

1、内部表drop table mytable 后就会被彻底删除,外部表则不会。

2、通过desc formatted 表名;查看表结构信息会发现table_type 不同。

3、外部表删除后重建数据自动回复(因为没有删除HDFS上的文件)

通过查询来建表:

1、通过 AS 完成建表,

select * from mytable5;

create table mytable6 as select id,name from mytable5;

通过like来建表

会创建结构完成的空表

create table mytable7 like mytable6;

遇到的问题:

问题1:

hive sequencefile导入文件遇到FAILED: SemanticException Unable to load data to destination table. Error: The file that you are trying to load does not match the file format of the destination table

原因

这是因为SequenceFile的表不能使用load来加载数据,只能导入sequence类型的数据

解决办法

创建一张新表,

create table mytable3(id int,name string,hobby array<string>,add map<string,string>) row format delimited fields terminated by ',' collection items terminated by '-' map keys terminated by ':' STORED AS TEXTFILE/STORED AS ORC ;

问题2:

执行一次load data 后再次执行会报错

原因:

执行后hdfs中的文件会被删除

解决方向:

hdfs dfs -put /home/hive/....txt /tem/hive/ 上传文件后执行即可解决。

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/78871
推荐阅读
  

闽ICP备14008679号