我需要通过编程为Hive表和视图生成DDL语句。我尝试使用Spark和Beeline来完成此任务。Beeline执行每个语句大约需要5-10秒,而Spark在几毫秒内完成同样的事情。我计划使用Spark,因为它比Beeline更快。使用Spark从Hive获取DDL语句的一个缺点是,它将CHAR VARCHAR字符作为String,它不保留CHAR、VARCHAR数据类型的长度信息。同时,Beeline保留了CHAR、VARCHAR数据类型的数据类型和长度信息。我使用的是Spark 2.4.1和Beeline 2.1.1。
下面给出了示例create table命令及其show create table输出。
直线输出:
Spark壳:
我想知道Spark端是否有任何配置来保留CHAR、VARCHAR数据类型的数据类型和长度信息。如果有其他方法可以快速从Hive获取DDL,我也会很满意。
1条答案
按热度按时间kokeuurv1#
这是在
您提出了堆栈溢出问题,我引用如下:
“我需要以编程方式为配置单元表和视图生成DDL语句。我尝试使用Spark和Beeline来完成此任务。Beeline执行每个语句大约需要5-10秒,而Spark在几毫秒内完成相同的任务。我计划使用Spark,因为它比Beeline更快。使用Spark从配置单元获取DDL语句的一个缺点是,它将CHAR VARCHAR字符作为String,它不保留CHAR、VARCHAR数据类型的长度信息。同时,beeline保留了CHAR、VARCHAR数据类型的数据类型和长度信息。我使用的是Spark 2.4.1和Beeline 2.1.1。下面给出了示例create table命令及其show create table输出。”
在测试数据库的配置单元中创建一个简单表
现在让我们来看看Spark弹
您可以看到Spark正确显示列
现在,让我们通过beeline在hive中创建相同的表
现在在spark-shell中再次检查
它显示OK。所以总的来说,你在Spark中得到的列定义和你在Hive中定义的一样。
在你上面的声明中,我引用了“我正在使用Spark 2. 4. 1和Beeline 2. 1. 1”,指的是旧版本的Spark和Hive可能有这样的问题。