hive快速建表的兩種方式

1、create table as

建表語句示例:

drop table if exists xx_toutiao_userinfo_asjson;
create table xx_toutiao_userinfo_asjson
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' 
STORED AS textfile
as
with tab_user_basic as(
select
a1.uri                                                        id                                                   ,
a1.buyerlevelscores                                           membership_level                                     ,
get_json_object(a1.snsjson,'$.sex')                           gender                                               ,
get_json_object(a1.snsjson,'$.country')                       country                                              ,
get_json_object(a1.snsjson,'$.province')                      province                                             ,
get_json_object(a1.snsjson,'$.city')                          city                                                 ,
a1.bail                                                       extra_info__bail                                     ,
a1.balance                                                    extra_info__balance                                  ,
a1.balancefrozen                                              extra_info__balanceFrozen                            ,
get_json_object(a1.snsjson,'$.language')                      extra_info__language                                 ,
get_json_object(a1.creditsjson,'$.buyTotalNum')               extra_info__creditsJson__buyTotalNum                 ,
get_json_object(a1.creditsjson,'$.buyReturnedNum')            extra_info__creditsJson__buyReturnedNum              ,
get_json_object(a1.creditsjson,'$.buyFaultNum')               extra_info__creditsJson__buyFaultNum                 ,
get_json_object(a1.creditsjson,'$.buyNum')                    extra_info__creditsJson__buyNum                      ,
get_json_object(a1.creditsjson,'$.sellTotalNum')              extra_info__creditsJson__sellTotalNum                ,
get_json_object(a1.creditsjson,'$.sellDisputeNum')            extra_info__creditsJson__sellDisputeNum              ,
get_json_object(a1.creditsjson,'$.sellFaultNum')              extra_info__creditsJson__sellFaultNum                ,
get_json_object(a1.creditsjson,'$.sellMultiWinsNum')          extra_info__creditsJson__sellMultiWinsNum            ,
get_json_object(a1.creditsjson,'$.sellNum')                   extra_info__creditsJson__sellNum                     ,
a1.lastpaymethod                                              extra_info__lastPayMethod                            ,
a1.membertime                                                 extra_info__memeberTime                              ,
a1.scene                                                      extra_info__scene                                    ,
a1.sellerlevelscores                                          extra_info__sellerLevelScores                        
from ods.ods_userinfo_userinfo_full_1d a1
where a1.dt='2020-01-01')
select a1.id,a1.membership_level,
case when a1.gender=1 then 0 when a1.gender=2 then 1 else null end gender,
a1.country,a1.province,a1.city,
concat("\{
\"bail\":",extra_info__bail,",
\"balance\":",extra_info__balance,",
\"balanceFrozen\":",extra_info__balanceFrozen,",
\"language\":\"",extra_info__language,"\",
 \"creditsJson\":
{
\"buyTotalNum\":",extra_info__creditsJson__buyTotalNum,",
\"buyReturnedNum\":",extra_info__creditsJson__buyReturnedNum,",
\"buyFaultNum\":",extra_info__creditsJson__buyFaultNum,",
\"buyNum\":",extra_info__creditsJson__buyNum,",
\"sellTotalNum\":",extra_info__creditsJson__sellTotalNum,",
\"sellDisputeNum\":",extra_info__creditsJson__sellDisputeNum,",
\"sellFaultNum\":",extra_info__creditsJson__sellFaultNum,",
\"sellMultiWinsNum\":",extra_info__creditsJson__sellMultiWinsNum,",
\"sellNum\":",extra_info__creditsJson__sellNum,"
},
\"lastPayMethod\":",extra_info__lastPayMethod,",
\"memeberTime\":",extra_info__memeberTime,",
\"scene\":\"",extra_info__scene,"\",
\"sellerLevelScores\":",extra_info__sellerLevelScores,"
\}") extra_info
from tab_user_basic a1
limit 1000;

查看錶結構語句:

hive> show create table xx_toutiao_userinfo_asjson;
OK
CREATE TABLE `xx_toutiao_userinfo_asjson`(
  `id` string COMMENT 'from deserializer', 
  `membership_level` int COMMENT 'from deserializer', 
  `gender` int COMMENT 'from deserializer', 
  `country` string COMMENT 'from deserializer', 
  `province` string COMMENT 'from deserializer', 
  `city` string COMMENT 'from deserializer', 
  `extra_info` string COMMENT 'from deserializer')
ROW FORMAT SERDE 
  'org.apache.hive.hcatalog.data.JsonSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'hdfs://HDFS41368/usr/hive/warehouse/tmp.db/xx_toutiao_userinfo_asjson'
TBLPROPERTIES (
  'transient_lastDdlTime'='1578032121')
Time taken: 0.04 seconds, Fetched: 18 row(s)

查詢數據:

select * from xx_toutiao_userinfo_asjson;
Time taken: 0.118 seconds, Fetched: 1000 row(s)

注意說明:
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' 可能必須與STORED AS textfile配合使用,因爲測試與STORED AS orcfile組合使用的時候報錯。

2、create table like

建表示範語句:

create table xx_toutiao_userinfo_likejson like xx_toutiao_userinfo_asjson;

查看錶結構語句:

hive> show create table xx_toutiao_userinfo_likejson;
OK
CREATE TABLE `xx_toutiao_userinfo_likejson`(
  `id` string COMMENT 'from deserializer', 
  `membership_level` int COMMENT 'from deserializer', 
  `gender` int COMMENT 'from deserializer', 
  `country` string COMMENT 'from deserializer', 
  `province` string COMMENT 'from deserializer', 
  `city` string COMMENT 'from deserializer', 
  `extra_info` string COMMENT 'from deserializer')
ROW FORMAT SERDE 
  'org.apache.hive.hcatalog.data.JsonSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
  'hdfs://HDFS41368/usr/hive/warehouse/tmp.db/xx_toutiao_userinfo_likejson'
TBLPROPERTIES (
  'transient_lastDdlTime'='1578032211')
Time taken: 0.086 seconds, Fetched: 18 row(s)

查詢數據:

hive> select * from xx_toutiao_userinfo_likejson;
OK
Time taken: 0.105 seconds

注意說明:
create table like是新建一個跟原表一模一樣表結構的新表,但是不復制數據。這個表結構一模一樣,包括ROW FORMAT SERDE 、STORED AS 等,而不像create table as 需要再單獨指定。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章