美文网首页
动态分区以及参数限制行数的写法

动态分区以及参数限制行数的写法

作者: BI罗 | 来源:发表于2020-06-30 11:32 被阅读0次
let
    Source = #"SQL/b2bc********** database xxxx-***-****-cdhdp-01",
    all = Source{[Schema="dbo",Item="Fact_lyNI"]}[Data],
   r1000 = Table.Range(all,0,1000),
    r10000 = Table.Range(all,0,10000),
    r0 = Table.Range(all,0,0)
in
    if Para="all" then all else if Para="r1000" then r1000 else if Para="r10000" then r10000 else r0

下面是更好的参数写法,可以直接看到本机查询(查询折叠)

let
    Source = #"SQL/b2bcxxxxxxx-01",
    all= Source{[Schema="dm",Item="V_Fact_y_v2"]}[Data],
    r1000= Table.FirstN(all,1000),
    r=if (Para)="r1000" then Table.FirstN(all,1000) else all
in
     r
let
    Source = #"SQL/bxxxxxx",
    d= Source{[Schema="dm",Item="V_Fact_xily"]}[Data],
    //r=Table.Range(d,0,TopRows)
    r= Table.FirstN(d,TopRows)
in
    r

Table.FirstN和Table.Range的作用都可以用来现在行数,但是Table.Range选择的行数区间更灵活,经过测试这两种方法都都能触发折叠查询

let
    x1=Date.AddMonths(Date.AddDays(DateTime.LocalNow(), -2),-3),//etl date
    x2=Date.ToText(#date(Date.Year(x1),Date.Month(x1),1)),   //4 month ago
    r1000 = "top 1000",
    r10000 = "top 10000",
    r1 = "top 1",
    r=if Para="all" then "" else if Para="r1000" then r1000 else if Para="r10000" then r10000 else r1,
    all = Sql.Database("b2b*******.database.chinacloudapi.cn", 
            "B2B-qa-*****-cd-01",
             [Query="select "&r&" * from [dbo].[Fact_daily] where trans_date>='"&x2&"'",CommandTimeout=#duration(0,1,0,0),MultiSubnetFailover=true])
    
in
    all


//月初的另一种写法
  // start_date = Date.StartOfMonth(#date(2020, 2, 1)), 
   //  end_date = Date.AddMonths(start_date, 1),


//start_date = Date.StartOfMonth(#date(2019, 1, 1)), 
//  end_date =DateTime.Date(Date.AddMonths(Date.StartOfMonth(Date.AddDays(DateTime.LocalNow(), -2)),-3)),
//DateTime.Date返回日期格式非日期时间格式,才能与start_date日期进行比较

sql语句导入方法会阻止查询折叠,可以table.view的方法手动触发查询折叠,避免二次查询
https://www.jianshu.com/p/eff0647e3ac5

为什么需要查询折叠


pq的很多操作都会阻止折叠查询(pq的查询,微软更推荐将pq的查询语句下压到数据源),命名,或者参数限制行数不会阻止查询折叠:

因此推荐可以用参数来限制行数(并且推荐Table.FirstN或者Table.Range的写法,不推荐sql拼接参数)

在表非常大的情况下,先用参数限制行数,然后再进行其他ETL的工作

let
   Source = #"SQLxxxxx",
   x = Source{[Schema="dm",Item="V_Fact_v2"]}[Data],
   start_date = Date.StartOfMonth(#date(2019, 1, 1)), 
   end_date =DateTime.Date(Date.AddMonths(Date.StartOfMonth(Date.AddDays(DateTime.LocalNow(), -2)),-3)),//DateTime.Date返回日期才能作比较
   all = Table.SelectRows(x, each [Daily] >= start_date and [Daily] < end_date),
   //时间区间为2019-1-1至当前时间往前的第4个月,例如现在2021-1-1,X分区就是2019-1-1到2020-9-30,runbook每月T-2为1号自动合并M-4分区到X分区
   r=if (Para)="r1000" then Table.FirstN(all,1000) else all
in
   r

相关文章

  • 动态分区以及参数限制行数的写法

    下面是更好的参数写法,可以直接看到本机查询(查询折叠) Table.FirstN和Table.Range的作用都可...

  • 查询折叠问题

    如上图,实际上pq语句的数据库参数写法,限制行数参数化,日期筛选,id=1,都不阻止查询折叠,但是参数限制 一定要...

  • Hive、Spark SQL任务参数调优

    动态分区 参数说明hive.exec.dynamic.partition是否开启动态分区,默认是false。如果要...

  • Hive动态分区

    Hive动态分区 几个参数set hive.exec.dynamic.partition=true //使用动态分...

  • 数仓--Hive-面试之Hive动态分区

    面试如果被问道,那么需要说出彩来,特别时参数 Hive动态分区参数配置 往hive分区表中插入数据时,如果需要创建...

  • Hive参数和动态分区

    Hive 参数、变量 hive当中的参数、变量,都是以命名空间开头通过${}方式进行引用,其中system、env...

  • 伙伴系统

    固定分区限制的内存中的作业道数,并且由于存在内部碎片而降低了内存的利用率;动态分区方式 复杂回收空调分区时需要进行...

  • Android 允许安装非应用市场的apk

    通过动态修改下面的参数,就可以打开限制。

  • CoreText进阶(四)-文字行数限制和显示更多

    本文的主要内容是使用CoreText如何进行行数的限制,以及设置了行数限制末尾的内容被截断了怎么设置截断的标识。此...

  • Hive--动态分区

    建立分区表时动态分区的语法. 插入数据时动态分区

网友评论

      本文标题:动态分区以及参数限制行数的写法

      本文链接:https://www.haomeiwen.com/subject/ountqktx.html