問題解決 hive建表之後存在中文注釋亂碼的問題

2021-10-04 16:26:20 字數 2743 閱讀 1218

為了後面的維護同事方便,一般都會要求同事在寫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,postgresms 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...