SparkSQL DDL语句之CREATE TABLE

前言

CREATE TABLE语句是用来给一个已存在的数据库中创建表的。我们平时用Hive等其他组件建表居多,本篇博客主要讲解一下SparkSQL如何进行建表。主要有三种方式:

  • CREATE TABLE USING DATA_SOURCE
  • CREATE TABLE USING HIVE FORMAT
  • CREATE TABLE LIKE

CREATE TABLE USING DATA_SOURCE

  1. 语法

    CREATE TABLE [ IF NOT EXISTS ] table_identifier
        [ ( col_name1 col_type1 [ COMMENT col_comment1 ], ... ) ]
        USING data_source
        [ OPTIONS ( key1=val1, key2=val2, ... ) ]
        [ PARTITIONED BY ( col_name1, col_name2, ... ) ]
        [ CLUSTERED BY ( col_name3, col_name4, ... ) 
            [ SORTED BY ( col_name [ ASC | DESC ], ... ) ] 
            INTO num_buckets BUCKETS ]
        [ LOCATION path ]
        [ COMMENT table_comment ]
     
### Spark SQL `CREATE TABLE` 语法与示例 #### 基本语法 在 Spark SQL 中,`CREATE TABLE` 是用于创新表的核心命令之一。以下是其基本语法结构: ```sql CREATE [TEMPORARY] TABLE [IF NOT EXISTS] table_name [(col_name1 data_type1, col_name2 data_type2, ...)] USING data_source [OPTIONS (key1=value1, key2=value2, ...)] [PARTITIONED BY (col_name3, ...)] [CLUSTERED BY (col_name4) INTO num_buckets BUCKETS] [LIMITATION limitation_expression] [LOCATION 'path'] [TBLPROPERTIES (property_name=property_value, ...)]; ``` 此语法支持多种选项来定义表的属性、存储位置以及分区设置等[^2]。 #### 示例说明 ##### 创基于现有表结构的新表 如果希望快速复制一张已有表的结构而不复制数据,则可以使用如下语句: ```sql CREATE TABLE Student_Dupli LIKE Student; ``` 这条语句会根据已存在的 `Student` 表创一个新的空表 `Student_Dupli`,两者的列定义完全一致[^2]。 ##### 使用指定的数据源创表 当需要明确指明所使用的文件格式时(例如 CSV 或 JSON),可以通过 `USING` 子实现: ```sql CREATE TABLE Student_CSV ( id INT, name STRING, age INT ) USING CSV OPTIONS ( header="true", delimiter="," ); ``` 这里不仅定义了表结构还设置了读取 CSV 文件的相关参数,比如是否有头部信息及字段分隔符。 ##### 定义外部表并指定路径 对于那些希望通过 HDFS 上特定目录中的文件作为数据来源的情况,可采用下面的方式构外部分区表: ```sql CREATE EXTERNAL TABLE IF NOT EXISTS logs_ext ( log_time TIMESTAMP, level STRING, message STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE LOCATION '/user/hive/warehouse/logs'; ``` 该例子展示了如何通过设定 `LOCATION` 参数把日志记录存放在集群内的某个固定地址下,并且采用了 Tab 键分割文本形式保存每条记录的内容。 ##### 添加额外元数据到表格配置里去 有时为了更好地管理和追踪各个对象之间的关系或者满足审计需求,在立之初就给定一些自定义标签也是很有必要的: ```sql CREATE TABLE employees ( employee_id BIGINT, first_name STRING, last_name STRING, hire_date DATE ) TBLPROPERTIES ('created_by'='John Doe', 'create_date'=current_date()); ``` 在此基础上增加了两个键值对分别表示创者姓名及其执行日期的信息附加到了这张雇员名单之上[^2]。 #### 结合实际场景的应用案例 假设现在有一个业务场景要求我们从 MySQL 数据库导入客户订单详情至 Hive Metastore 当中以便后续分析计算工作开展得更加高效便捷的话,那么整个流程大致如下所示: 1. 首先启动带有 JDBC 支持功能开启状态下的交互环境; ```bash ./bin/spark-shell --master yarn \ --conf spark.executor.memory=8g \ --driver-class-path /opt/mysql-connector-java.jar \ --jars /opt/mysql-connector-java.jar ``` 2. 接着编写一段简单的 Scala 脚本来完成连接远程服务器获取目标集合的操作过程; ```scala val jdbcDF = spark.read.format("jdbc"). option("url", "jdbc:mysql://localhost:3306/testdb"). option("dbtable", "(SELECT orderid,customerid FROM orders WHERE status='shipped') t"). option("user","username"). option("password","passwd").load() jdbcDF.createOrReplaceTempView("orders_view") ``` 3. 最后再利用标准 SQL 查询语言表达式将临时视图持久化为永久性的物理实体即可; ```sql CREATE TABLE shipped_orders AS SELECT * FROM orders_view; ``` 以上就是关于如何运用 Apache Spark 提供的强大工具集解决日常工作中遇到的各种复杂难题的一个典型示范[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

SunnyRivers

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

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

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

打赏作者

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

抵扣说明:

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

余额充值