
# CREATE TABLE AS SELECT
#### 命令功能
CREATE TABLE As SELECT命令通过指定带有表属性的字段列表来创建Hudi Table。
#### 命令格式
**CREATE\[ OR REPLACE\] TABLE** *\[ IF NOT EXISTS\] \[database_name.\]table_name\|* *DELTA.\`obs://bucket_name/tbl_path\`*
**USING DELTA**
*\[ COMMENT table_comment \]*
*\[ PARTITIONED BY (partColumnList) \]*
*\[ LOCATION location_path\]*
*\[ AS query_statement \]*
#### 参数描述
表1CREATE TABLE AS SELECT参数描述 
| **参数**          | **描述**                                                          |
|:---|:---|
| database_name   | Database名称，由字母、数字和下划线（_）组成。                                     |
| table_name      | Database中的表名，由字母、数字和下划线（_）组成。                                   |
| *bucket_name*   | obs桶名称。                                                         |
| *tbl_path*      | Delta表在obs桶中的存储位置。                                              |
| using           | 参数delta，定义和创建Delta table                                        |
| table_comment   | 表的描述信息。                                                         |
| location_path   | Delta表的存储位置，当前版本通过表名创建Delta表时必须指定，且只支持obs路径，指定该路径Delta 表会创建为外表。 |
| query_statement | select查询表达式                                                     |
   
#### 所需权限
- SQL权限
  表2CREATE TABLE AS SELECT所需权限列表 
  | 权限描述               |
  |:---|
  | 数据库的CREATE_TABLE权限 |
  | 查询表的SELECT权限       |
     
  

- 细粒度权限：dli:database:createTable, dli:table:select。
- 由LakeFormation提供的元数据服务，权限配置详见LakeFormation文档。
 
#### 示例
- 创建分区表
  ```
  create table if not exists delta_table0
  using delta
  partitioned by (dt)
  location 'obs://bucket_name0/db0/delta_table0'
  as
  select 1 as id, 'a1' as name, 10 as price, 1000 as dt;
  ```
  
- 创建非分区表
  ```
  create table if not exists delta_table0
  using delta
  location 'obs://bucket_name0/db0/delta_table0'
  as
  select 1 as id, 'a1' as name, 10 as price;
  create table delta.`obs://bucket_name0/db0/delta_table0`
  using delta
  partitioned by (part_col1, part_col2)
  as select id,name,year,class_name from table1 where part_col1=2024;
  ```
  
 
