如何通过Spark SQL利用JDBC数据源创建PARQUET格式表
问题分析与解决方案
错误原因
你的SQL语句存在两处核心语法问题:
CREATE TABLE LIKE与USING JDBC语法冲突:LIKE用于复制已有表的结构和元数据,而USING用于指定表的数据源/存储类型,Spark SQL不支持将两者直接组合使用。STORED AS与USING互斥:这两个关键字都是用来指定表的存储格式,不能同时出现在同一条CREATE TABLE语句中。
正确实现方式
方式一:先复制结构创建Parquet空表,再导入JDBC数据
适合需要完整复制原表元数据(如字段注释、约束)的场景:
- 创建与原表结构一致的Parquet格式空表:
CREATE TABLE `PARQUET_MY_TABLE` LIKE `MY_TABLE` STORED AS PARQUET;
- 从JDBC数据源读取数据并插入到新表:
INSERT INTO `PARQUET_MY_TABLE` SELECT * FROM JDBC.`OPTIONS`( url "jdbc:mysql://XX.XX.XX.XX:3306/test?useSSL=FALSE&nullCatalogMeansCurrent=true&zeroDateTimeBehavior=convertToNull", driver "com.mysql.cj.jdbc.Driver", dbtable "MY_TABLE", user "username", password "password" );
方式二:用CTAS语句一步创建并导入数据
适合只需要复制字段结构和数据的场景(不会复制原表注释、约束等元数据):
CREATE TABLE `PARQUET_MY_TABLE` STORED AS PARQUET AS SELECT * FROM JDBC.`OPTIONS`( url "jdbc:mysql://XX.XX.XX.XX:3306/test?useSSL=FALSE&nullCatalogMeansCurrent=true&zeroDateTimeBehavior=convertToNull", driver "com.mysql.cj.jdbc.Driver", dbtable "MY_TABLE", user "username", password "password" );
内容的提问来源于stack exchange,提问作者Luis Estrada
相关产品推荐
相关产品推荐

