Spark SQL----CREATE TABLE

Spark SQL----CREATE TABLE

  • 一、描述
  • 二、创建 DATASOURCE 表
    • 2.1 描述
    • 2.2 语法
    • 2.3 参数
    • 2.4 数据源交互
    • 2.5 例子
  • 三、创建HIVEFORMAT表
    • 3.1 描述
    • 3.2 语法
    • 3.3 参数
    • 3.4 例子
  • 四、CREATE TABLE LIKE
    • 4.1 描述
    • 4.2 语法
    • 4.3 参数
    • 4.4 例子

一、描述

CREATE TABLE语句用于在现有数据库中定义一个表。

二、创建 DATASOURCE 表

2.1 描述

CREATE TABLE语句使用数据源定义一个新表。

2.2 语法

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 ]

注意,USING子句和AS SELECT子句之间的子句可以按任意顺序出现。例如,可以在TBLPROPERTIES后面写COMMENT表注释。

2.3 参数

  • table_identifier
    指定一个表名称,可以选择使用数据库名称对其进行限定。
    语法:[database_name.]table_name
  • USING data_source
    数据源是用于创建表的输入格式。数据源可以是CSV、TXT、ORC、JDBC、PARQUET等。
  • OPTIONS
    将被注入存储属性的数据源的选项。
  • PARTITIONED BY
    分区是根据指定的列在表上创建的。
  • CLUSTERED BY
    在表上创建的分区将根据指定的存储列被存储到固定的存储桶中。
    注:Bucketing是一种优化技术,它使用bucket(和Bucketing列)来确定数据分区并避免数据shuffle。
  • SORTED BY
    指定bucket列的顺序。可选地,在SORTED BY子句中的任何列名之后,可以使用ASC表示升序,也可以使用DESC表示降序。如果未指定,则默认为ASC。
  • INTO num_buckets BUCKETS
    指定存储桶编号,该编号用于CLUSTERED BY子句。
  • LOCATION
    存储表数据的目录的路径,可以是分布式存储(如HDFS等)上的路径。
  • COMMENT
    用于描述表的字符串文字。
  • TBLPROPERTIES
    用于标记表定义的键值对列表。
  • AS select_statement
    该表是使用select语句中的数据填充的。

2.4 数据源交互

数据源表的作用类似于指向基础数据源的指针。例如,你可以使用JDBC数据源在Spark中创建一个表“foo”,该表指向MySQL中的一个表”bar“。当你读/写表“foo”时,你实际上读/写了表“bar”。
一般来说,CREATE TABLE是在创建一个“指针”,你需要确保它指向现有的东西。一个例外是文件源,如parquet、json。如果你没有指定LOCATION,Spark将为你创建一个默认的表位置。
对于CREATE TABLE AS SELECT with LOCATION,如果给定位置作为非空目录存在,Spark将抛出分析异常。如果spark.sql.legacy.allowNonEmptyLocationInCTAS设置为true,spark将用输入查询的数据覆盖基础数据源,以确保创建的表包含与输入查询完全相同的数据。

2.5 例子

--Use data source
CREATE TABLE student (id INT, name STRING, age INT) USING CSV;--Use data from another table
CREATE TABLE student_copy USING CSVAS SELECT * FROM student;--Omit the USING clause, which uses the default data source (parquet by default)
CREATE TABLE student (id INT, name STRING, age INT);--Use parquet data source with parquet storage options
--The columns 'id' and 'name' enable the bloom filter during writing parquet file,
--column 'age' does not enable
CREATE TABLE student_parquet(id INT, name STRING, age INT) USING PARQUETOPTIONS ('parquet.bloom.filter.enabled'='true','parquet.bloom.filter.enabled#age'='false');--Specify table comment and properties
CREATE TABLE student (id INT, name STRING, age INT) USING CSVCOMMENT 'this is a comment'TBLPROPERTIES ('foo'='bar');--Specify table comment and properties with different clauses order
CREATE TABLE student (id INT, name STRING, age INT) USING CSVTBLPROPERTIES ('foo'='bar')COMMENT 'this is a comment';--Create partitioned and bucketed table
CREATE TABLE student (id INT, name STRING, age INT)USING CSVPARTITIONED BY (age)CLUSTERED BY (Id) INTO 4 buckets;--Create partitioned and bucketed table through CTAS
CREATE TABLE student_partition_bucketUSING parquetPARTITIONED BY (age)CLUSTERED BY (id) INTO 4 bucketsAS SELECT * FROM student;--Create bucketed table through CTAS and CTE
CREATE TABLE student_bucketUSING parquetCLUSTERED BY (id) INTO 4 buckets (WITH tmpTable AS (SELECT * FROM student WHERE id > 100)SELECT * FROM tmpTable
);

三、创建HIVEFORMAT表

3.1 描述

CREATE TABLE语句使用Hive格式定义一个新表。

3.2 语法

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 ]

请注意,列定义子句和AS SELECT子句之间的子句可以按任何顺序出现。例如,可以在TBLPROPERTIES之后编写COMMENT table_comment。

3.3 参数

  • table_identifier
    指定一个表名称,可以选择使用数据库名称对其进行限定。
    语法:[ database_name. ] table_name
  • EXTERNAL
    表是使用LOCATION提供的路径定义的,不使用此表的默认位置。
  • PARTITIONED BY
    分区是根据指定的列在表上创建的。
  • CLUSTERED BY
    在表上创建的分区将根据为分桶指定的列分桶为固定的分桶。
    注:Bucketing是一种优化技术,它使用bucket(和Bucketing列)来确定数据分区并避免数据shuffle。
  • SORTED BY
    指定bucket列的顺序。可选地,在SORTED BY子句中的任何列名之后,可以使用ASC表示升序,也可以使用DESC表示降序。如果未指定,则默认为ASC。
  • INTO num_buckets BUCKETS
    指定存储桶编号,该编号用于CLUSTERED BY子句。
  • row_format
    指定输入和输出的行格式。有关更多语法详细信息,请参阅HIVE FORMAT。
  • STORED AS
    表存储的文件格式,可以是TEXTFILE、ORC、PARQUET等。
  • LOCATION
    存储表数据的目录的路径,可以是分布式存储(如HDFS等)上的路径。
  • COMMENT
    用于描述表的字符串文字。
  • TBLPROPERTIES
    用于标记表定义的键值对列表。
  • AS select_statement
    该表是使用select语句中的数据填充的。

3.4 例子

--Use hive format
CREATE TABLE student (id INT, name STRING, age INT) STORED AS ORC;--Use data from another table
CREATE TABLE student_copy STORED AS ORCAS SELECT * FROM student;--Specify table comment and properties
CREATE TABLE student (id INT, name STRING, age INT)COMMENT 'this is a comment'STORED AS ORCTBLPROPERTIES ('foo'='bar');  --Specify table comment and properties with different clauses order
CREATE TABLE student (id INT, name STRING, age INT)STORED AS ORCTBLPROPERTIES ('foo'='bar')COMMENT 'this is a comment';--Create partitioned table
CREATE TABLE student (id INT, name STRING)PARTITIONED BY (age INT)STORED AS ORC;--Create partitioned table with different clauses order
CREATE TABLE student (id INT, name STRING)STORED AS ORCPARTITIONED BY (age INT);--Use Row Format and file format
CREATE TABLE student (id INT, name STRING)ROW FORMAT DELIMITED FIELDS TERMINATED BY ','STORED AS TEXTFILE;--Use complex datatype
CREATE EXTERNAL TABLE family(name STRING,friends ARRAY<STRING>,children MAP<STRING, INT>,address STRUCT<street: STRING, city: STRING>)ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' ESCAPED BY '\\'COLLECTION ITEMS TERMINATED BY '_'MAP KEYS TERMINATED BY ':'LINES TERMINATED BY '\n'NULL DEFINED AS 'foonull'STORED AS TEXTFILELOCATION '/tmp/family/';--Use predefined custom SerDe
CREATE TABLE avroExampleROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'TBLPROPERTIES ('avro.schema.literal'='{ "namespace": "org.apache.hive","name": "first_schema","type": "record","fields": [{ "name":"string1", "type":"string" },{ "name":"string2", "type":"string" }] }');--Use personalized custom SerDe(we may need to `ADD JAR xxx.jar` first to ensure we can find the serde_class,
--or you may run into `CLASSNOTFOUND` exception)
ADD JAR /tmp/hive_serde_example.jar;CREATE EXTERNAL TABLE family (id INT, name STRING)ROW FORMAT SERDE 'com.ly.spark.serde.SerDeExample'STORED AS INPUTFORMAT 'com.ly.spark.example.serde.io.SerDeExampleInputFormat'OUTPUTFORMAT 'com.ly.spark.example.serde.io.SerDeExampleOutputFormat'LOCATION '/tmp/family/';--Use `CLUSTERED BY` clause to create bucket table without `SORTED BY`
CREATE TABLE clustered_by_test1 (ID INT, AGE STRING)CLUSTERED BY (ID)INTO 4 BUCKETSSTORED AS ORC--Use `CLUSTERED BY` clause to create bucket table with `SORTED BY`
CREATE TABLE clustered_by_test2 (ID INT, NAME STRING)PARTITIONED BY (YEAR STRING)CLUSTERED BY (ID, NAME)SORTED BY (ID ASC)INTO 3 BUCKETSSTORED AS PARQUET

四、CREATE TABLE LIKE

4.1 描述

CREATE TABLE语句使用现有表或视图的定义/元数据定义一个新表。

4.2 语法

CREATE TABLE [IF NOT EXISTS] table_identifier LIKE source_table_identifierUSING data_source[ ROW FORMAT row_format ][ STORED AS file_format ][ TBLPROPERTIES ( key1=val1, key2=val2, ... ) ][ LOCATION path ]

4.3 参数

  • table_identifier
    指定一个表名称,可以选择使用数据库名称对其进行限定。
    语法:[ database_name. ] table_name
  • USING data_source
    数据源是用于创建表的输入格式。数据源可以是CSV、TXT、ORC、JDBC、PARQUET等。
  • ROW FORMAT
    SERDE用于指定自定义SerDe或DELIMITED子句,以便使用本机SerDe。
  • STORED AS
    表存储的文件格式,可以是TEXTFILE、ORC、PARQUET等。
  • TBLPROPERTIES
    指定了必须设置的表属性,如created.by.user, owner等。
  • LOCATION
    存储表数据的目录的路径,可以是分布式存储(如HDFS等)上的路径。创建外部表的位置。

4.4 例子

-- Create table using an existing table
CREATE TABLE Student_Dupli like Student;-- Create table like using a data source
CREATE TABLE Student_Dupli like Student USING CSV;-- Table is created as external table at the location specified
CREATE TABLE Student_Dupli like Student location  '/root1/home';-- Create table like using a rowformat
CREATE TABLE Student_Dupli like StudentROW FORMAT DELIMITED FIELDS TERMINATED BY ','STORED AS TEXTFILETBLPROPERTIES ('owner'='xxxx');

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/48732.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

保护Mojo模型:确保数据模型安全的策略

保护Mojo模型&#xff1a;确保数据模型安全的策略 在机器学习领域&#xff0c;模型的安全性是至关重要的&#xff0c;尤其是当模型被部署到生产环境中时。Mojo模型&#xff0c;作为H2O.ai提供的一种模型导出格式&#xff0c;需要特别注意保护以防止潜在的安全风险。本文将详细…

rv1126利用rkmedia、opencv、rockx……完成人脸识别

一、总体框架 视频采集、处理使用rkmedia&#xff1a;vi模块进行视频输入、rga模块进行视频处理 人脸识别&#xff1a;先获取rga输出码流&#xff0c;再调用rkmedia的模型对人脸进行推理&#xff08;线程1&#xff09; 打框框&#xff1a;opencv&#xff08;线程2&#xff0…

在交互式系统中,非剥夺是不是一个好的策略?为什么?

非剥夺方式:分派程序一旦把处理机分配给某进程后便让它一直运行下去,直到进程完成或发生某事件而阻塞时,才把处理机分配给另一个进程。 剥夺方式:当一个进程正在运行时,系统可以基于某种原则,剥夺已分配给它的处理机,将之分配给其它进程。剥夺原则有:优先权原则、短进程、优先…

Docker 容器中的 Docker Compose 简介

Docker Compose是什么 Docker Compose是一个用于定义和运行多个Docker容器的工具。它是Docker官方提供的开源项目&#xff0c;用于实现对Docker容器集群的快速编排。通过Compose&#xff0c;开发者可以使用YAML文件&#xff08;通常是docker-compose.yml文件&#xff09;来配置…

Golang | Leetcode Golang题解之第264题丑数II

题目&#xff1a; 题解&#xff1a; func nthUglyNumber(n int) int {dp : make([]int, n1)dp[1] 1p2, p3, p5 : 1, 1, 1for i : 2; i < n; i {x2, x3, x5 : dp[p2]*2, dp[p3]*3, dp[p5]*5dp[i] min(min(x2, x3), x5)if dp[i] x2 {p2}if dp[i] x3 {p3}if dp[i] x5 {p5…

艾迈斯欧司朗与greenteg推出的突破性体温监测技术已成为全球铁人三项的关键技术支持

中国 上海&#xff0c;2024年7月22日——全球领先的光学解决方案供应商艾迈斯欧司朗&#xff08;瑞士证券交易所股票代码&#xff1a;AMS&#xff09;今日宣布&#xff0c;与知名合作伙伴greenteg携手推出的CORE传感器为耐力运动领域带来新变革——其体温监测技术已成为全球铁人…

分类预测 | Matlab实现BES-LSSVM秃鹰算法优化最小二乘支持向量机多特征分类预测/故障诊断

分类预测 | Matlab实现BES-LSSVM秃鹰算法优化最小二乘支持向量机多特征分类预测/故障诊断 目录 分类预测 | Matlab实现BES-LSSVM秃鹰算法优化最小二乘支持向量机多特征分类预测/故障诊断分类效果基本介绍程序设计参考资料 分类效果 基本介绍 Matlab实现BES-LSSVM秃鹰算法优化最…

使用wireshark第一次捕获数据包

打开wireshark&#xff1a; 点击捕获&#xff0c;选项。 这里我选择以太网&#xff0c;然后点开始&#xff1a; 然后就成这样了&#xff1a; 点击左上角那个红色的按钮&#xff0c;可以暂停捕获&#xff0c;就变成了下面的样子&#xff1a; 这三个框有自己的名字&…

721.力扣每日一题7/15 Java(并查集)

博客主页&#xff1a;音符犹如代码系列专栏&#xff1a;算法练习关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ 目录 解题思路 解题过程 时间复杂度 空间复杂度 Code 解题思路 本题的…

有什么图片转word 免费软件?6个软件帮助你快速转换文件

有什么图片转word 免费软件&#xff1f;6个软件帮助你快速转换文件 转换图片到Word文档的免费软件通常包括一些在线工具和桌面应用程序&#xff0c;它们可以帮助用户将图片中的文本提取并转换为可编辑的Word格式。以下是六个推荐的免费软件&#xff1a; 迅捷文字识别&#xff…

【深度学习教程】

文章目录 pytorch官方教程知识蒸馏&#xff1a;https://pytorch.org/tutorials/beginner/knowledge_distillation_tutorial.html 李宏毅-机器学习/深度学习https://speech.ee.ntu.edu.tw/~hylee/ml/2021-spring.phphttps://speech.ee.ntu.edu.tw/~hylee/ml/2022-spring.phphttp…

【LeetCode】day18:530 - 二叉搜索树的最小绝对差, 501 - 二叉搜索树中的众数, 236 - 二叉树的最近公共祖先

LeetCode 代码随想录跟练 Day18 530.二叉搜索树的最小绝对差501.二叉搜索树中的众数236.二叉树的最近公共祖先 530.二叉搜索树的最小绝对差 题目描述&#xff1a; 给你一个二叉搜索树的根节点 root &#xff0c;返回 树中任意两不同节点值之间的最小差值 。 差值是一个正数&am…

基于组态王和S7-200实现传感器连接的简单人机界面

在当今社会&#xff0c;工业自动化正以前所未有的速度发展&#xff0c;成为推动经济增长和提升生产效率的关键因素之一。随着科技的不断进步&#xff0c;自动化不仅仅是制造业的专利&#xff0c;也逐渐渗透到农业、交通、建筑等各个领域&#xff0c;为人们的生活带来了诸多变革…

工作纪实53-log4j日志打印文件隔离

在项目中&#xff0c;我有一堆业务日志需要打印&#xff0c;另一部分的日志&#xff0c;是没有格式的&#xff0c;需要被云平台离线解析并收集到kafka或者hdfs、hive等&#xff0c;需要将日志隔离打印到不同的文件 正常的log4j配置是下面这样的&#xff0c;配合Sl4j直接使用默认…

linux中创建一个名为“thread1“,堆栈大小为1024,优先级为2的线程

在Linux中&#xff0c;直接创建一个具有特定堆栈大小和优先级的线程通常不是通过标准的POSIX线程&#xff08;pthread&#xff09;库直接支持的。POSIX线程库&#xff08;pthread&#xff09;提供了创建和管理线程的基本机制&#xff0c;但不直接支持设置线程的堆栈大小或优先级…

星际漫游闪耀LEC授权展,COSMOSPANDA星际熊猫与BUNBUNX包小冥共绘国潮新篇章

上海&#xff0c;2024年7月17日 —— 在全球瞩目的2024年LEC全球授权展上海站盛大开幕之际&#xff0c;星际漫游携其两大国潮明星IP——COSMOSPANDA星际熊猫与bunbunx包小冥精彩亮相&#xff0c;为现场观众带来了一场融合视觉与文化的国潮盛宴。 展位盛况空前&#xff0c;国潮…

TDengin基础应用

一、框架的概念理解 之所以先介绍这块&#xff0c;是由于建库建表配置参数时需要用到&#xff0c;对参数的理解才能更好发挥数据库的性能与数据的高可用&#xff0c;可能理解的不够透彻&#xff0c;欢迎指正&#xff0c;先上官网的介绍&#xff1a; 整体架构 | TDengine 文档…

【Python】 探索 Python 中的 enumerate 方法

为何每次早餐 仍然魂离魄散 原来 那朝分手都要啜泣中上班 明明能够过得这关 赢回旁人盛赞 原来 顽强自爱这样难 难得的激情总枉费 残忍的好人都美丽 别怕 你将无人会代替 &#x1f3b5; 陈慧娴《情意结》 在 Python 编程中&#xff0c;遍历序列是非常常见…

uniapp封装请求拦截器,封装请求拦截和响应拦截的方法

首先我们先看一下uni官方给开发者提供的uni.request用来网络请求的api 1 2 3 4 5 6 7 8 9 uni.request({ url: , method: GET, data: {}, header: {}, success: res > {}, fail: () > {}, complete: () > {} }); 可以看到我们每次请求数据的时候都需…

pytest-fixture

资料来源&#xff1a;虫师2020的个人空间-虫师2020个人主页-哔哩哔哩视频 支持类似unittest风格的fixture&#xff0c;即setup和teardown class类中的方法分类 类方法可以直接调用&#xff0c;需要添加装饰器&#xff0c;修改类中的变量 实例方法&#xff0c;需要先实例化&…