
# 使用ZSTD_JNI压缩算法压缩Hive ORC表
#### 操作场景
ZSTD_JNI是ZSTD压缩算法的native实现，相较于ZSTD而言，压缩读写效率和压缩率更优，并允许用户设置压缩级别，以及对特定格式的数据列指定压缩方式。
目前仅ORC格式的表支持ZSTD_JNI压缩方式，而普通的ZSTD压缩算法支持全量存储格式而不仅限于ORC，所以建议用户对数据压缩有特殊要求的场景下再使用此特性。
#### 约束与限制
该章节内容仅适用MRS 3.2.0及之后版本。
#### 创建ZSTD_JNI压缩格式的Hive表
1. 以Hive客户端安装用户登录安装客户端的节点。
2. 执行以下命令，切换到客户端安装目录，例如安装目录为"/opt/client"，请用户根据实际情况修改。 
   ```
   cd /opt/client
   ```
   
   
3. 执行以下命令配置环境变量。 
   ```
   source bigdata_env
   ```
   
   
4. 集群是否启用了Kerberos认证。 
   - 是，执行以下命令进行用户认证，然后执行[5]。
     ```
     kinit Hive业务用户
     ```
     
   
   - 否，执行[5]。
   
   
   
   
5. 执行以下命令登录Hive客户端。
   
   ```
   beeline
   ```
   
   
6. 创建ZSTD_JNI压缩格式的Hive表。 
   - 使用ZSTD_JNI压缩算法时，只需在创建ORC表时指定表属性参数"orc.compress"为"ZSTD_JNI"即可，例如：
     ```
     create table tab_1(id string,name string) stored as orc TBLPROPERTIES("orc.compress"="ZSTD_JNI");
     ```
     
   
   
   
   - ZSTD_JNI的压缩级别的取值范围为1\~19，数值越高压缩比越高，相对压缩读写速率会变慢；数值越低压缩比越低，相对读写速率会变快，默认值为"6"。建表时设置表属性参数"orc.global.compress.level"即可设置压缩级别，如：
     ```
     create table tab_1(id string,name string) stored as orc TBLPROPERTIES("orc.compress"="ZSTD_JNI",  'orc.global.compress.level'='3');
     ```
     
   
   
   
   - 用户可以对特定的数据格式列指定压缩，以对业务数据进一步压缩。当前支持的特定格式数据包括：JSON数据列、BASE64数据列、时间戳数据列和UUID数据列。建表时设置表属性参数"orc.column.compress"即可。 例如，以下示例指定了压缩格式为ZSTD_JNI，压缩列f2为JSON格式的数据，f3为BASE64格式的数据，f4为时间戳格式的数据，f5为UUID格式的数据：
     ```
     create table test_orc_zstd_jni(f1 int,f2 string,f3 string,f4 string,f5 string) stored as orc
     TBLPROPERTIES('orc.compress'='ZSTD_JNI', 'orc.column.compress'='[{"type":"cjson","columns":"f2"},{"type":"base64","columns":"f3"},{"type ":"gorilla","columns":{"format": "yyyy-MM-dd HH:mm:ss.SSS", "columns": "f4"}},{"type":"uuid","columns":"f5"}]');
     ```
     用户可根据实际情况按照对应格式插入数据即可实现进一步压缩的效果。
     
   
   
   
   
7. 执行以下命令查看表信息： 
   ```
   desc formatted tab_1;
   ```
   回显结果中会显示压缩格式相关信息，例如[图1]表示Hive表的压缩方式为"ZSTD_JNI"且压缩级别为"5"。
   图1查看表信息   
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002319474689.png "点击放大")
   
   
 
