字符集和编码

ASCII编码:128个字符

ISO-8859-1:可以表示256个字符,前128个和ASCII相同

汉字编码集GB2312:包含682个英文,字母等符号以及常见的6763个简体中文,台湾设置了一套繁体中文编码BIG5(大五码)

GB2312BIG5都使用一个字节存储ASCII中包含英文,数字,常见符号,使用两个字节存储简体中文或者繁体中文

GBKGB2312的扩展,支持简体中文和繁体中文,使用一个字节存储ASCII中包含英文,数字,常见符号,使用两个字节存储简体中文或者繁体中文

GB18030兼容GBK,包含中文,生僻字,少数民族文字,日文,朝鲜文纳入统一编码,可以使用1个字节,2个字节,4个字节存储一个字符

最后国际社会给出了所有字符统一的编码,统一的字符集规范(Unicode)国际标准字符集。

Unicode的具体实现,UTF-8,UTF-16,Unicode通过一定的算法将每种语言中的每个字符转为了UTF-8/UTF-16等具体编码类型,UTF-8存储各类字符所占用的字节数。

Java版本编解码的实例:

public static void main(String args[]) throws CharacterCodingException {
    Charset charset = Charset.forName("utf-8");
    //获取utf-8编码器
    CharsetEncoder charsetEncoder = charset.newEncoder();
    //获取utf-8解码器
    CharsetDecoder charsetDecoder = charset.newDecoder();
    //后续存储的“颜群JAVA讲师”共16字节:UTF中,每个常见汉字占3个字节;每个英文占1个字节。
    CharBuffer charBuffer = CharBuffer.allocate(16);
    charBuffer.put("张三JAVA学习");
    charBuffer.flip();

    System.out.println("编码开始");
    //编码  :String->byte[],使用utf-8类型的编码器
    ByteBuffer byteBuffer = charsetEncoder.encode(charBuffer);
    for (int i = 0; i < 16; i++) {//一个汉字占3个字节
        System.out.print(byteBuffer.get() + "\t");
    }
    System.out.println("\n编码结束\n");


    byteBuffer.flip();
    //解码:二进制->String,也使用utf-8类型的编码器
    System.out.println("---解码开始1---");
    charBuffer = charsetDecoder.decode(byteBuffer);
    System.out.println(charBuffer.toString());
    System.out.println("---解码结束1---\n");

    //byteBuffer中存储的是经过UTF-8类型编码器编码后的字节码,但以下却是使用gbk类型的解码器解码,因此会出现乱码
    Charset charset2 = Charset.forName("gbk");
    byteBuffer.flip();
    System.out.println("---解码开始2---");
    charBuffer = charset2.decode(byteBuffer);
    System.out.println(charBuffer.toString());
    System.out.println("---解码结束2---\n");
}

### Hive 大数据性能调优最佳实践 #### 一、配置优化 对于云服务器上的Hive大数据环境,合理的资源配置至关重要。调整JVM参数可以有效提升查询效率[^1]。 ```bash set mapreduce.map.memory.mb=4096; set mapreduce.reduce.memory.mb=8192; ``` 适当增加MapReduce阶段内存分配有助于减少溢写磁盘次数,从而加快执行速度。 #### 二、表结构设计 采用分区(partitioning)与分桶(bucketing),可显著降低扫描范围并提高读取速率。通过预定义的数据分布模式来组织存储文件,使得特定条件下的过滤操作更加高效[^2]。 ```sql CREATE TABLE sales ( order_id STRING, customer_name STRING, amount DOUBLE ) PARTITIONED BY (year INT, month INT); ``` 此命令创建了一个按年份月份划分的销售记录表格实例。 #### 三、查询语句改写 利用子查询因子化(subquery factoring)以及谓词下推(predicate pushdown)特性,在不影响逻辑的前提下重构SQL表达式,以便更好地发挥引擎内部优化器的作用[^3]。 ```sql WITH filtered_sales AS ( SELECT * FROM sales WHERE year >= 2020 AND year <= 2022 ) SELECT COUNT(*) FROM filtered_sales fs JOIN customers c ON fs.customer_name = c.name; ``` 上述例子展示了如何先筛选出目标时间段内的交易记录再与其他表关联计算总数的过程。 #### 四、启用ORC/Parquet格式 相较于传统的TextFile或SequenceFile格式而言,列式存储方式如ORC(optimized row columnar)或者Parquet能够提供更紧凑的空间占用率及更快捷的访问路径[^4]。 ```sql ALTER TABLE my_table SET FILEFORMAT ORC; INSERT OVERWRITE TABLE my_table SELECT * FROM old_format_table; ``` 这段脚本说明了怎样转换现有表至新的压缩编码形式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

83Dillon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值