逻辑表DQL操作

本文为您介绍逻辑表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)