為了後面的維護同事方便,一般都會要求同事在寫hive
建表語句的時候,都需要新增相關的注釋,包括字段注釋和表注釋。而一般都是直接為中文注釋的。如下是乙個比較完整的hive
建表語句:
create external table
`test`
( s_no string comment
'序號'
, i_type int
comment
'類別'
)comment
'測試表'
partitioned by(`
day`
int)
location '/tmp/test'
;
所以這裡就出現問題了,寫好比較完整的hive
建表指令碼之後,執行之後,去檢視表的建表結構,發現存在亂碼
軟體版本
cdh5.15.1
hive
1.1.0-cdh5.15.1
其實hive
的元資料都是儲存在資料庫裡面,目前支援mysql
,oracle
,postgres
和ms sql server
。如果我們建表發現亂碼,很顯然就可以歸類到資料庫表亂碼問題。本例關聯的資料庫是mysql
。
那麼,在hive
關聯的mysql
資料庫裡面,會涉及哪些表呢?整體可以看下圖:
另外,我整理了一下,常用的表如下:
表名說明
關聯鍵tbls
所有hive表的基本資訊(表名,建立時間,所屬者等)
tbl_id,sd_id
table_param
表級屬性(如是否外部表,表注釋,最後修改時間等)
tbl_id
columns
hive表字段資訊(字段注釋,欄位名,字段型別,字段序號)
sd_id
sds所有hive表、表分割槽所對應的hdfs資料目錄和資料格式
sd_id,serde_id
serde_param
序列化反序列化資訊,如行分隔符、列分隔符、null的表示字元等
serde_id
partitions
hive表分割槽資訊(所屬表,分割槽值)
part_id,sd_id,tbl_id
partition_keys
hive分割槽表分割槽鍵(即分割槽字段)
tbl_id
partition_key_vals
hive表分割槽名(鍵值)
part_id
index_params
索引的字段資訊
index_id
在mysql
對應的hive
庫執行以下sql
,即可更新回來:
-- 修改表字段註解和表註解
alter
table columns_v2 modify
column
comment
varchar
(256
)character
set utf8;
alter
table table_params modify
column param_value varchar
(4000
)character
set utf8;
-- 修改分割槽字段註解:
alter
table partition_params modify
column param_value varchar
(4000
)character
set utf8;
alter
table partition_keys modify
column pkey_comment varchar
(4000
)character
set utf8;
-- 修改索引註解:
alter
table index_params modify
column param_value varchar
(4000
)character
set utf8;
重新建表之後,然後使用命令show create table test
可以檢視到注釋已經正常了。
查詢問題是怎麼產生的,並解決掉。這個過程可能會比較枯燥和繁瑣,不過收穫還是蠻大的!
hive-mysql的關係(hive整合mysql作為元資料)
hive(三)hive元資料資訊對應mysql資料庫表
union之後orderby失效問題解決
最近在寫sql的時候出現了乙個排序的問題 因為用到了union連線2張表的資料 分別在表1和表2都用到了order by 資料如下 表1是有資料的 然後表2的資料沒有資料 最後union合併了之後的查詢結果 排序出現了問題 因為sql的執行順序是先order by 然後union再拼下一張表的資料,...
登入中的問題解決
判斷使用者名稱和密碼正確採取登入 public bool isvaliduser users ca paras 0 value ca.username paras 1 value ca.password 這裡如果是大於0的話 相當於用使用者名稱和密碼來查詢使用者表中的使用者id 並存在 如果不存在就...
複製虛擬機器之後閘道器重啟問題解決
2.刪除該檔案 或者你也可以直接進行刪除不執行第一步 rm f etc udev rules.d 70 persistent.rules 3.進入 etc sysconfig network scripts ifcfg eth0路徑中刪除掉uuid和hwaddr這兩行 vim etc sysconf...