You need to enable JavaScript to run this app.
导航
DDL语句
最近更新时间:2024.05.14 16:21:26首次发布时间:2024.05.14 16:21:26

在 Apache Spark SQL 中,DDL(Data Definition Language)语句用于定义和修改数据库的结构。以下是一些 Spark SQL DDL 语句的用法示例,包括执行语句和相应的执行结果:

1 CREATE DATABASE

创建一个新的数据库。

  • 语法
CREATE { DATABASE | SCHEMA } [ IF NOT EXISTS ] database_name
    [ COMMENT database_comment ]
    [ LOCATION database_directory ]
    [ WITH DBPROPERTIES ( property_name = property_value [ , ... ] ) ]
  • 执行语句示例
CREATE DATABASE IF NOT EXISTS my_database;
  • 执行结果
    创建了一个名为 my_database 的新数据库,如果数据库已存在,则不执行任何操作。

2 USE DATABASE

切换当前使用的数据库。

  • 语法
USE database_name
  • 执行语句示例
USE my_database;
  • 执行结果
    设置了 my_database 为当前数据库,之后执行的 SQL 语句将默认在该数据库下执行。

3 ALTER DATABASE

修改数据库的属性。

  • 语法
ALTER { DATABASE | SCHEMA } database_nameSET DBPROPERTIES ( property_name = property_value [ , ... ] )
  • 执行语句示例
ALTER DATABASE my_database SET DBPROPERTIES ('property_name'='property_value');
  • 执行结果
    修改了 my_database 数据库的属性。

4 DROP DATABASE

删除一个数据库。

  • 语法
DROP { DATABASE | SCHEMA } [ IF EXISTS ] dbname [ RESTRICT | CASCADE ]
  • 执行语句示例
DROP DATABASE IF EXISTS my_database CASCADE;
  • 执行结果
    删除了 my_database 数据库及其包含的所有表,CASCADE 选项确保所有相关对象都被删除。

5 CREATE TABLE

创建一个新的表。

  • 语法

CREATE TABLE USING DATASOURCE

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 ]
    [ TBLPROPERTIES ( key1=val1, key2=val2, ... ) ][ AS select_statement ]

CREATE HIVEFORMAT TABLE

CREATE [ EXTERNAL ] TABLE [ IF NOT EXISTS ] table_identifier
    [ ( col_name1[:] col_type1 
    [ COMMENT col_comment1 ], ... ) ]
    [ COMMENT table_comment ]
    [ PARTITIONED BY ( col_name2[:] col_type2 [ COMMENT col_comment2 ], ... ) 
        | ( col_name1, col_name2, ... ) ]
    [ CLUSTERED BY ( col_name1, col_name2, ...) 
        [ SORTED BY ( col_name1 [ ASC | DESC ], col_name2 [ ASC | DESC ], ... ) ] 
        INTO num_buckets BUCKETS ]
    [ ROW FORMAT row_format ]
    [ STORED AS file_format ]
    [ LOCATION path ]
    [ TBLPROPERTIES ( key1=val1, key2=val2, ... ) ]
    [ AS select_statement ]

row_format:    
    : SERDE serde_class [ WITH SERDEPROPERTIES (k1=v1, k2=v2, ... ) ]
    | DELIMITED [ FIELDS TERMINATED BY fields_terminated_char [ ESCAPED BY escaped_char ] ] 
        [ COLLECTION ITEMS TERMINATED BY collection_items_terminated_char ] 
        [ MAP KEYS TERMINATED BY map_key_terminated_char ]
        [ LINES TERMINATED BY row_terminated_char ]
        [ NULL DEFINED AS null_char ]

CREATE TABLE LIKE

CREATE TABLE [IF NOT EXISTS] table_identifier LIKE source_table_identifier
    USING data_source[ ROW FORMAT row_format ]
    [ STORED AS file_format ]
    [ TBLPROPERTIES ( key1=val1, key2=val2, ... ) ]
    [ LOCATION path ]
  • 执行语句示例
CREATE TABLE [IF NOT EXISTS] my_database.my_table (
  id INT,
  name STRING,
  value DOUBLE
);
  • 执行结果
    在 my_database 数据库中创建了一个名为 my_table 的新表,如果表已存在,则不执行任何操作。当不提供 IF NOT EXISTS 且表已经存在时,则报错提示表已经存在。

6 ALTER TABLE

修改表的结构,例如添加或替换列。

  • 语法
ALTER TABLE table_identifier RENAME TO table_identifier
ALTER TABLE table_identifier partition_spec RENAME TO partition_spec
  • 执行语句示例
ALTER TABLE my_database.my_table ADD COLUMNS (new_col1 STRING, new_col2 INT);
  • 执行结果
    在 my_table 表中添加了两列 new_col1 和 new_col2。

7 TRUNCATE TABLE

删除表中的所有数据。

  • 语法
TRUNCATE TABLE table_identifier [ partition_spec ]
  • 执行语句示例
TRUNCATE TABLE my_database.my_table;
  • 执行结果
    删除了 my_table 表中的所有数据,但表结构保持不变。

8 REPAIR TABLE

修复损坏的表。

  • 语法
MSCK REPAIR TABLE table_identifier
  • 执行语句示例
REPAIR TABLE my_database.my_table;
  • 执行结果
    修复了 my_table 表,使其恢复到可使用状态。

9 DROP TABLE

删除一个表。

  • 语法
DROP TABLE [ IF EXISTS ] table_identifier
  • 执行语句示例
DROP TABLE IF EXISTS my_database.my_table;
  • 执行结果
    删除了 my_database 数据库中的 my_table 表。

10 CREATE VIEW

创建一个新的视图。

  • 语法
CREATE [ OR REPLACE ] [ [ GLOBAL ] TEMPORARY ] VIEW [ IF NOT EXISTS ] view_identifiercreate_view_clauses AS query
  • 执行语句示例
CREATE VIEW [IF NOT EXISTS] my_database.my_view AS
SELECT name, SUM(value) AS total_value
FROM my_database.my_table
GROUP BY name;
  • 执行结果
    在 my_database 数据库中创建了一个名为 my_view 的新视图,该视图显示了 my_table 表中每个 name 的总 value。当不提供IF NOT EXISTS且视图已经存在时,则报错提示视图已经存在。

11 ALTER VIEW

修改视图的定义。

  • 语法
ALTER VIEW view_identifier RENAME TO view_identifier
  • 执行语句示例
ALTER VIEW my_database.my_view AS
SELECT name, SUM(value) AS total_value, id
FROM my_database.my_table
GROUP BY name, id;
  • 执行结果
    修改了 my_view 视图的定义,现在包括 id 列,并按 name 和 id 分组。

12 DROP VIEW

删除一个视图。

  • 语法
DROP VIEW [ IF EXISTS ] view_identifier
  • 执行语句示例
DROP VIEW IF EXISTS my_database.my_view;
  • 执行结果
    删除了 my_database 数据库中的 my_view 视图。

13 CREATE FUNCTION

创建一个自定义的 Scala 或 Java 函数。

  • 语法
CREATE [ OR REPLACE ] [ TEMPORARY ] FUNCTION [ IF NOT EXISTS ]function_name AS class_name [ resource_locations ]
  • 执行语句示例
CREATE FUNCTION [IF NOT EXISTS] my_database.my_function
AS 'full.class.name.of.your.UDAF';
  • 执行结果
    在 my_database 数据库中创建了一个名为 my_function 的新函数。当不提供IF NOT EXISTS且函数已经存在时,则报错提示函数已经存在。

14 DROP FUNCTION

删除一个自定义函数。

  • 语法
DROP [ TEMPORARY ] FUNCTION [ IF EXISTS ] function_name
  • 执行语句示例:
DROP FUNCTION IF EXISTS my_database.my_function;
  • 执行结果
    删除了 my_database 数据库中的 my_function 函数。