在Hubble中,您可以使用常见的数据库对象,按照SQL标准,分为了catalog,schema,table。我们可以把它们理解为一个容器或者数据库对象命名空间中的一个层次,主要用来解决命名冲突问题。从概念上说,一个Hubble数据库包含多个catalog,每个catalog又包含多个schema,而每个schema又包含多个数据库对象(表、视图、字段等),反过来讲一个数据库对象必然属于一个schema,而该schema又必然属于一个catalog,这样我们就可以得到该数据库对象的完全限定名称从而解决命名冲突问题了。例如一个数据库表的完全限定名称就可以表示为:Catalog名称.Schema名称.表名称。
举个例子,比如想查Hubble存储下tpcds库下的customer表,可以使用:
select * from hubble.tpcds.customer;
在Hubble中,目录 catalog
相当于给数据源一个命名,如hubble、system。
show catalogs;
+---------+
| Catalog |
+---------+
| hubble |
| system |
+---------+
这里system是只读的系统内置源,存放一些系统数据库。如元信息库,运行状态库等。
模式 schema
也可理解为我们通常意义上的数据库 database
,用于管理一组表的集合。模式指代数据库的结构或布局,描述了数据库对象(如表、列、数据类型)之间的关系和属性。
可以使用 USE 指令切换到目标数据库目录下。在所在数据库内可以直接使用对象名指代对象。
use hubble.tpcds;
select * from customer;
如果在当前目录要使用其他数据库中的对象,需要使用全限定名
<catalog_name>.<database_name>.<object_name>
来指代,例如:
select * from hubble.db_test.student;
创建库时需要指定连接源,例如:
create schema hubble.my_db;
Hubble的表和其他数据库类型中的表一样,主要用于存储数据。表按关系型数据库的形式组织数据,即按行和列来组织存储数据。
Hubble的表支持多种数据类型,包括基础的布尔,整型,浮点型,精确数值,字符串,日期时间等类型,也支持复杂的结构类型,如数组和Map。
Hubble支持按不同的粒度对表进行切分如分区和分桶,也支持事务表的创建。存储在Hubble中的表与hive兼容,详情可参考SQL语法章节详细内容。
普通视图
创建语法:
CREATE [ OR REPLACE ] VIEW as <Query_SQL>
普通视图使用查询语句创建一个逻辑上的虚拟表,它不存储数据,而是实时从源表中获取。视图不能insert或update数据,每次对视图进行查询时,视图所用的查询语句会被再次执行一次,我们也可以将视图理解为查询的封装。视图不能和表重名。视图的作用很多,比如简化查询、对表内容进行只读权限控制等。
物化视图
创建语法:
CREATE [ OR REPLACE ] MATERIALIZED VIEW as <Query_SQL>
物化视图是一个具有实际物理存储的表。它将复杂的关联数据转化为一张实际的表,使得数据查询可以直接从物化视图中进行,无需再执行复杂的关联操作。物化视图的数据是预先计算和存储的,它需要通过刷新来更新数据。
CREATE OR REPLACE MATERIALIZED VIEW hubble.v_test.v_course2
WITH (
refresh_interval = '5m',
grace_period = '5m',
max_import_duration = '1m'
)
as select * from hubble.db_ai.course ;
刷新可以是手动的,也可以是自动的。创建物化视图时,可以通过设置refresh_interval
属性的值来定义刷新时间。当源表数据更新或删除后,物化视图定时刷新查询结果,可以提供更好的查询性能。
您可以使用函数对Hubble中的数据进行各种计算和变换。Hubble拥有大量的内置函数,这些函数可进行字符串处理、数值类型处理、科学计算、日期时间处理、敏感信息加解密、复杂数据类型处理等,具体函数及其用法请参考函数章节。