Azure Databricks入门 - 认识一下Databricks的数据对象
分类: Azure Databricks ◆ 标签: #基础 #Azure #大数据 #入门 ◆ 发布于: 2023-08-07 20:46:28

我在已经启动的Azure Databricks
上创建了一个基于SQL
的notebook
, 然后尝试运行如下的语句:
show databases;
返回如下的结果:
然后我继续运行SQL
命令:
%sql use mydb1; show tables;
返回如下的结果:
我们继续运行如下的sql
:
select * from test;
虽然这些命令都很简单,但是同时带来了一系列的问题:
- 这些数据库到底是什么数据库?是关系型数据库吗?
- 这些表是什么类型的表?
首先这些肯定不是关系数据库,虽然他们看起来非常像,在Databricks
中数据库仅仅是其中用于组织数据对象的一个形式,数据库代表的是数据表的集合。
另外我们学习过关系型数据或者其他的no sql
数据库也好,都有元数据的概念,那么databricks
用于存储元数据的服务是什么?
- Unity Catalog: 是下一代由
databricks
开发的元数据管理服务,目前还是在public preview
,还不能用于正式生产,而且Azure China
也不支持。这个服务将数据对象分为三个级别:catalog
.database
.table
。 hive metastore
: 目前应用成熟的元数据服务,直接使用了Hive
的服务。在Databricks
中,每个集群的节点上都会安装一个Hive metastore
的客户端,这些客户端都会链接到Control panel
的Hive Meta store
服务上,在Azure Databricks
中,后端默认是Azure Database for MySQL
。
默认情况下Databricks
是直接使用hive metastore
服务的,因此你可以尝试运行下述的语句:
select * from hive_metastore.mydb1.test1
也说明在使用hive metastore
的情况,统一的catelog
就是hive_metastore
默认的表类型
我们前面已经学习了默认的meta store
是hive metastore
, 那么默认的表类型是什么类型呢?
默认的表类型是Delta table
类型, 至于什么是Delta table
, 我们后面再来学习。简单说它是基于PARQUET
数据格式的一种新的数据类型。
如果在databricks
里创建一个表,而不指定数据源,那么它的表类型默认就是Delta table
。
同时Databricks
支持很多种类型数据源的表,例如支持:
CSV
Hive Table
PARQUET
等等。
我们可以用一系列的语句来验证:
%sql CREATE DATABASE mydbtest LOCATION '/mnt/{your network filesystem}/mydbtest'
然后查看你刚刚创建的目录:
%fs ls /mnt/{your network filesystem}/mydbtest
然后我们再创建一个表, 并拷贝数据:
USE mydbtest; CREATE TABLE IF NOT EXISTS loan_risks; COPY INTO loan_risks FROM '/databricks-datasets/learning-spark-v2/loans/loan-risks.snappy.parquet' FILEFORMAT = PARQUET FORMAT_OPTIONS ( 'mergeSchema' = 'true') COPY_OPTIONS ('mergeSchema' = 'true'); SELECT * FROM loan_risks limit 5;
由于我们在创建时并没有指定表的格式,因此默认就是Delta
表。
可以查看文件明确一下:
%fs ls /mnt/hongweiadsl2/mydbtest/loan_risks
结果如下图:
同时你可能已经注意到了,我们在使用COPY INTO
时可以选择多种数据源,注意区分表类型和数据源。
我们可以这样测试一下,假设我们想要一个纯粹PARQUET
的表呢?
%sh mkdir /dbfs/mnt/hongweiadsl2/mydbtest/test1 cp /dbfs/databricks-datasets/learning-spark-v2/loans/loan-risks.snappy.parquet /dbfs/mnt/hongweiadsl2/mydbtest/test1 ls /dbfs/mnt/hongweiadsl2/mydbtest/test1
这样我们来创建一个基于PARQUET
的表
%sql %sql CREATE TABLE IF NOT EXISTS test1 ( loan_id BIGINT, funded_amnt INT, paid_amnt DOUBLE, addr_state STRING ) USING PARQUET LOCATION '/mnt/hongweiadsl2/mytest/test1/';
这样就可以创建一个基于PARQUET
的表了。
同样也可以创建一个基于hive
的表,只需要使用语句USING HIVE
即可以为一个hive
格式的表。
Managed
表和外部表
Databricks
管理的表和外部表概念和Hive
的内部表以及外部表的概念是一致的。managed
表由databricks
管理元数据和数据,但是外部表databricks
仅仅管理元数据,就不过多的描述了。