hive 在Spark SQL中显示配置单元表上的创建表-将CHAR、VARCHAR视为STRING

nimxete2  于 2022-11-05  发布在  Hive
关注(0)|答案(1)|浏览(232)

我需要通过编程为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,我也会很满意。

kokeuurv

kokeuurv1#

这是在

Hive 3.1.1
Spark 3.1.1

您提出了堆栈溢出问题,我引用如下:
“我需要以编程方式为配置单元表和视图生成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输出。”
在测试数据库的配置单元中创建一个简单表

hive> use test;
OK
hive> create table etc(ID BIGINT, col1 VARCHAR(30), col2 STRING);
OK
hive> desc formatted etc;

# col_name              data_type               comment

id                      bigint
col1                    varchar(30)
col2                    string

# Detailed Table Information

Database:               test
OwnerType:              USER
Owner:                  hduser
CreateTime:             Fri Mar 11 18:29:34 GMT 2022
LastAccessTime:         UNKNOWN
Retention:              0
Location:               hdfs://rhes75:9000/user/hive/warehouse/test.db/etc
Table Type:             MANAGED_TABLE
Table Parameters:
        COLUMN_STATS_ACCURATE   {\"BASIC_STATS\":\"true\",\"COLUMN_STATS\":{\"col1\":\"true\",\"col2\":\"true\",\"id\":\"true\"}}
        bucketing_version       2
        numFiles                0
        numRows                 0
        rawDataSize             0
        totalSize               0
        transient_lastDdlTime   1647023374

# Storage Information

SerDe Library:          org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
InputFormat:            org.apache.hadoop.mapred.TextInputFormat
OutputFormat:           org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
Compressed:             No
Num Buckets:            -1
Bucket Columns:         []
Sort Columns:           []
Storage Desc Params:
        serialization.format    1

现在让我们来看看Spark弹

scala> spark.sql("show create table test.etc").show(false)
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|createtab_stmt                                                                                                                                                                      |
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
|CREATE TABLE `test`.`etc` (
  `id` BIGINT,
  `col1` VARCHAR(30),
  `col2` STRING)
USING text
TBLPROPERTIES (
  'bucketing_version' = '2',
  'transient_lastDdlTime' = '1647023374')
|
+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

您可以看到Spark正确显示列
现在,让我们通过beeline在hive中创建相同的表

0: jdbc:hive2://rhes75:10099/default> use test

No rows affected (0.019 seconds)

0: jdbc:hive2://rhes75:10099/default> create table etc(ID BIGINT, col1 VARCHAR(30), col2 STRING)

. . . . . . . . . . . . . . . . . . > No rows affected (0.304 seconds)

0: jdbc:hive2://rhes75:10099/default> desc formatted etc

. . . . . . . . . . . . . . . . . . > +-------------------------------+----------------------------------------------------+----------------------------------------------------+

|           col_name            |                     data_type                      |                      comment                       |

+-------------------------------+----------------------------------------------------+----------------------------------------------------+

| # col_name                    | data_type                                          | comment                                            |

| id                            | bigint                                             |                                                    |

| col1                          | varchar(30)                                        |                                                    |

| col2                          | string                                             |                                                    |

|                               | NULL                                               | NULL                                               |

| # Detailed Table Information  | NULL                                               | NULL                                               |

| Database:                     | test                                               | NULL                                               |

| OwnerType:                    | USER                                               | NULL                                               |

| Owner:                        | hduser                                             | NULL                                               |

| CreateTime:                   | Fri Mar 11 18:51:00 GMT 2022                       | NULL                                               |

| LastAccessTime:               | UNKNOWN                                            | NULL                                               |

| Retention:                    | 0                                                  | NULL                                               |

| Location:                     | hdfs://rhes75:9000/user/hive/warehouse/test.db/etc | NULL                                               |

| Table Type:                   | MANAGED_TABLE                                      | NULL                                               |

| Table Parameters:             | NULL                                               | NULL                                               |

|                               | COLUMN_STATS_ACCURATE                              | {\"BASIC_STATS\":\"true\",\"COLUMN_STATS\":{\"col1\":\"true\",\"col2\":\"true\",\"id\":\"true\"}} |

|                               | bucketing_version                                  | 2                                                  |

|                               | numFiles                                           | 0                                                  |

|                               | numRows                                            | 0                                                  |

|                               | rawDataSize                                        | 0                                                  |

|                               | totalSize                                          | 0                                                  |

|                               | transient_lastDdlTime                              | 1647024660                                         |

|                               | NULL                                               | NULL                                               |

| # Storage Information         | NULL                                               | NULL                                               |

| SerDe Library:                | org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe | NULL                                               |

| InputFormat:                  | org.apache.hadoop.mapred.TextInputFormat           | NULL                                               |

| OutputFormat:                 | org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat | NULL                                               |

| Compressed:                   | No                                                 | NULL                                               |

| Num Buckets:                  | -1                                                 | NULL                                               |

| Bucket Columns:               | []                                                 | NULL                                               |

| Sort Columns:                 | []                                                 | NULL                                               |

| Storage Desc Params:          | NULL                                               | NULL                                               |

|                               | serialization.format                               | 1                                                  |

+-------------------------------+----------------------------------------------------+----------------------------------------------------+

33 rows selected (0.159 seconds)

现在在spark-shell中再次检查

scala> spark.sql("show create table test.etc").show(false)

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

|createtab_stmt                                                                                                                                                                      |

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

|CREATE TABLE `test`.`etc` (

  `id` BIGINT,

  `col1` VARCHAR(30),

  `col2` STRING)

USING text

TBLPROPERTIES (

  'bucketing_version' = '2',

  'transient_lastDdlTime' = '1647024660')

|

+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

它显示OK。所以总的来说,你在Spark中得到的列定义和你在Hive中定义的一样。
在你上面的声明中,我引用了“我正在使用Spark 2. 4. 1和Beeline 2. 1. 1”,指的是旧版本的Spark和Hive可能有这样的问题。

相关问题