本文为您介绍逻辑表DQL查询语句。
使用限制
当使用SELECT语句时,返回结果最多只能显示10000行结果,同时返回结果要小于10MB。当SELECT语句作为子句时则无此限制,SELECT子句会将全部结果返回给上层查询。
SELECT语句查询分区表时默认禁止全表扫描。
SELECT 标准查询
Dataphin支持标准的SELECT语句查询逻辑表, 用于从表中选取满足指定条件的数据。
[with <cte>[, ...] ]
select [all | distinct] <select_expr>[, <except_expr>)][, <replace_expr>] ...
from <ld_data_unit>.<logical_table_name>
[where <where_condition>]
[group by {<col_list>|rollup(<col_list>)}]
[having <having_condition>]
[order by <order_condition>]
[distribute by <distribute_condition> [sort by <sort_condition>]|[ cluster by <cluster_condition>] ]
[limit <number>]
[window <window_clause>]
重要
需要注意的是数据板块名称不可省略。
示例说明:
为便于理解使用方法,本文为您提供SELECT(标准查询)示例命令。在Dataphin中创建逻辑表user后,您可使用如下示例命令查询逻辑表的数据。
SELECT * FROM ld_test.dim_user WHERE ds>0;
SELECT 特殊查询(WHERE子句)
除标准的SELECT查询语句之外,Dataphin提供查询关联逻辑表字段的一种特殊写法,可以大大简化SQL编码量,提升效率。
select <table_alias>.<column_list>
,<table_alias>.<dim_role>[.<dim_role>].<dim_columnn_list>
from <ld_data_unit>.<logical_table_name> <table_alias>
where <where_condition>
命令解释:
table_alias:所查询的逻辑表别名,在这种用法中,别名不可省略。
dim_role:关联的维度逻辑表在本表的角色名。
column_list:主表的字段。
dim_column_list:关联维度逻辑表的字段。
ld_data_unit:数据板块名称。
示例说明:
下图示例中,下单事实逻辑表ld_test.fct_crt_sale_order_id关联了客户维度逻辑表ld_test.dim_customer 和地址维度逻辑表ld_test.dim_address;地址维度逻辑表ld_test.dim_address关联了城市维度逻辑表 ld_test.dim_region_lvl3 (层级维度逻辑表,在dim_address中的角色名为 dim_city)。
以查询某一笔订单(订单ID=123)的客户姓名以及收货城市为例,可以使用以下语句:
select crt_sale_order_id
,ord.dim_customer.user_name
,ord.dim_address.dim_city.region_lvl3_name as city_name
from ld_test.fct_crt_sale_order_di ord
where ds = '20230101'
and crt_sale_order_id = 123
以上语法在标准查询中等价于如下SQL语句:
select crt_sale_order_id
,cust.user_name
,city.region_lvl3_name as city_name
from (select *
from ld_test.fct_crt_sale_order_di
where ds = '20230101'
and crt_sale_order_id = 123) ord
left outer join
(select *
from ld_test.dim_customer
where ds = '20230101') cust
on (ord.customer_id = cust.customer_id)
left outer join
(select *
from ld_test.dim_address
where ds = '20230101') addr
on (ord.delivery_address_id = addr.address_id)
left outer join
(select *
from ld_test.dim_region_lvl3 --原始城市层级维度表名,角色名为 dim_city
where ds = '20230101') city
on (addr.city_id = city.region_lvl3_id)
文档内容是否对您有帮助?