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 需要再單獨指定。