<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://devcafe.co.kr/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=19ksh88</id>
	<title>데브카페 - 사용자 기여 [ko]</title>
	<link rel="self" type="application/atom+xml" href="https://devcafe.co.kr/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=19ksh88"/>
	<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/%ED%8A%B9%EC%88%98:%EA%B8%B0%EC%97%AC/19ksh88"/>
	<updated>2026-05-19T22:37:07Z</updated>
	<subtitle>사용자 기여</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=BigQuery_AutoScaling_Usage_SQL&amp;diff=970</id>
		<title>BigQuery AutoScaling Usage SQL</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=BigQuery_AutoScaling_Usage_SQL&amp;diff=970"/>
		<updated>2024-11-11T08:07:07Z</updated>

		<summary type="html">&lt;p&gt;19ksh88: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* BigQuery Capacity 사용 시 AutoScaling 사용량에 대한 모니터링 SQL &lt;br /&gt;
* GCP Billing 기준 TimeZone인 PST(태평양 표준시) 기준으로 TimeZone을 사용&lt;br /&gt;
* https://cloud.google.com/bigquery/docs/slots-autoscaling-intro#monitor_autoscaling_with_information_schema&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
with DATE_BUCKET as (&lt;br /&gt;
  select cal_date&lt;br /&gt;
  FROM UNNEST(GENERATE_DATE_ARRAY(CAST(parse_date(&#039;%Y%m%d&#039;,&#039;20240601&#039;) as date), CAST(parse_date(&#039;%Y%m%d&#039;,&#039;20241111&#039;) as date), INTERVAL 1 DAY)) as cal_date&lt;br /&gt;
)&lt;br /&gt;
, RESERVATION_CHANGES as (&lt;br /&gt;
  select *&lt;br /&gt;
  from (&lt;br /&gt;
    SELECT datetime(change_timestamp, (&#039;PST8PDT&#039;)) change_timestamp_org,&lt;br /&gt;
           date(date_trunc(datetime(change_timestamp, (&#039;PST8PDT&#039;)), DAY)) as change_date,&lt;br /&gt;
           datetime(IFNULL(LAG(a.change_timestamp) OVER (partition by a.reservation_name ORDER BY a.change_timestamp DESC),CURRENT_TIMESTAMP()), (&#039;PST8PDT&#039;)) AS end_change_timestamp_org,&lt;br /&gt;
           date(datetime(IFNULL(LAG(a.change_timestamp) OVER (partition by a.reservation_name ORDER BY a.change_timestamp DESC),CURRENT_TIMESTAMP()), (&#039;PST8PDT&#039;))) AS end_change_date,&lt;br /&gt;
           project_id,&lt;br /&gt;
           reservation_name,&lt;br /&gt;
           ignore_idle_slots,&lt;br /&gt;
           action,&lt;br /&gt;
           slot_capacity,&lt;br /&gt;
           autoscale.current_slots,&lt;br /&gt;
           autoscale.max_slots,&lt;br /&gt;
           user_email,&lt;br /&gt;
           edition&lt;br /&gt;
    FROM `region-US`.INFORMATION_SCHEMA.RESERVATION_CHANGES a &lt;br /&gt;
  )&lt;br /&gt;
  where 1=1&lt;br /&gt;
  and action NOT IN (&#039;DELETE&#039;)&lt;br /&gt;
)&lt;br /&gt;
, DATE_BUCKET_RESERVATION_CHANGES as (&lt;br /&gt;
  select cal_date&lt;br /&gt;
        , case when cal_date &amp;gt; change_date then CAST(parse_timestamp(&#039;%Y-%m-%d %H:%M:%S&#039;, cal_date || &#039; 00:00:00&#039;) AS datetime)&lt;br /&gt;
               else change_timestamp_org&lt;br /&gt;
          end as change_timestamp_new&lt;br /&gt;
        , case when cal_date &amp;lt; end_change_date then CAST(parse_timestamp(&#039;%Y-%m-%d %H:%M:%S&#039;, date_add(cal_date, interval 1 day) || &#039; 00:00:00&#039;) AS datetime)&lt;br /&gt;
               else end_change_timestamp_org&lt;br /&gt;
          end as end_change_timestamp_new&lt;br /&gt;
        , R.project_id&lt;br /&gt;
        , R.reservation_name&lt;br /&gt;
        , R.ignore_idle_slots&lt;br /&gt;
        , R.action&lt;br /&gt;
        , R.slot_capacity&lt;br /&gt;
        , R.current_slots&lt;br /&gt;
        , R.max_slots&lt;br /&gt;
        , R.user_email&lt;br /&gt;
        , R.edition&lt;br /&gt;
  from DATE_BUCKET T&lt;br /&gt;
    join RESERVATION_CHANGES R&lt;br /&gt;
      on R.change_date &amp;lt;&amp;gt; R.end_change_date&lt;br /&gt;
     and cal_date &amp;gt;= R.change_date&lt;br /&gt;
     and cal_date &amp;lt;= R.end_change_date&lt;br /&gt;
  union all&lt;br /&gt;
  select cal_date&lt;br /&gt;
        , change_timestamp_org as change_timestamp_new&lt;br /&gt;
        , end_change_timestamp_org as end_change_timestamp_new&lt;br /&gt;
        , R.project_id&lt;br /&gt;
        , R.reservation_name&lt;br /&gt;
        , R.ignore_idle_slots&lt;br /&gt;
        , R.action&lt;br /&gt;
        , R.slot_capacity&lt;br /&gt;
        , R.current_slots&lt;br /&gt;
        , R.max_slots&lt;br /&gt;
        , R.user_email&lt;br /&gt;
        , R.edition&lt;br /&gt;
  from DATE_BUCKET T&lt;br /&gt;
    join RESERVATION_CHANGES R&lt;br /&gt;
      on R.change_date = R.end_change_date&lt;br /&gt;
     and cal_date = R.change_date&lt;br /&gt;
)&lt;br /&gt;
, tb_main as (&lt;br /&gt;
select change_timestamp_new&lt;br /&gt;
    , end_change_timestamp_new&lt;br /&gt;
    , TIMESTAMP_DIFF(end_change_timestamp_new,change_timestamp_new,SECOND) as diff&lt;br /&gt;
    , ceil(&lt;br /&gt;
          (UNIX_MICROS(cast(end_change_timestamp_new as timestamp)) - UNIX_MICROS(cast(change_timestamp_new as timestamp))) / 1000 / 1000&lt;br /&gt;
          ) as diff_mill&lt;br /&gt;
    -- , TIMESTAMP_DIFF(end_change_timestamp_new,change_timestamp_new,millisecond) as diff_mill&lt;br /&gt;
    -- , TIMESTAMP_DIFF(end_change_timestamp_new,change_timestamp_new,MICROSECOND) as diff_micro&lt;br /&gt;
    , project_id&lt;br /&gt;
    , reservation_name&lt;br /&gt;
    , ignore_idle_slots&lt;br /&gt;
    , action&lt;br /&gt;
    , slot_capacity&lt;br /&gt;
    , current_slots&lt;br /&gt;
    , max_slots&lt;br /&gt;
    , user_email&lt;br /&gt;
    , edition&lt;br /&gt;
    , CASE WHEN edition=&#039;STANDARD&#039; THEN 0.04/60/60 &lt;br /&gt;
           WHEN edition=&#039;ENTERPRISE&#039; THEN 0.06/60/60 END PAYG_PRICING&lt;br /&gt;
from DATE_BUCKET_RESERVATION_CHANGES&lt;br /&gt;
where 1=1&lt;br /&gt;
-- and edition = &#039;STANDARD&#039;&lt;br /&gt;
order by cal_date desc, change_timestamp_new desc&lt;br /&gt;
)&lt;br /&gt;
SELECT project_id&lt;br /&gt;
     , edition&lt;br /&gt;
     , reservation_name&lt;br /&gt;
     , date(change_timestamp_new) as change_date&lt;br /&gt;
    --  , min(change_timestamp_new) change_timestamp_new&lt;br /&gt;
    --  , max(end_change_timestamp_new) end_change_timestamp_new&lt;br /&gt;
     , sum(slot_capacity*diff)*MAX(PAYG_PRICING) BASE_PRICING&lt;br /&gt;
     , sum(current_slots*diff)*MAX(PAYG_PRICING) AUTOSCALING_PRICING&lt;br /&gt;
     , sum(current_slots*diff)&lt;br /&gt;
     , sum(current_slots*diff_mill)&lt;br /&gt;
  FROM tb_main&lt;br /&gt;
  GROUP BY project_id, edition, reservation_name, change_date&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>19ksh88</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=BigQuery_AutoScaling_Usage_SQL&amp;diff=969</id>
		<title>BigQuery AutoScaling Usage SQL</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=BigQuery_AutoScaling_Usage_SQL&amp;diff=969"/>
		<updated>2024-11-11T06:27:16Z</updated>

		<summary type="html">&lt;p&gt;19ksh88: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* BigQuery Capacity 사용 시 AutoScaling 사용량에 대한 모니터링 SQL &lt;br /&gt;
* GCP Billing 기준 TimeZone인 PST(태평양 표준시) 기준으로 TimeZone을 사용&lt;br /&gt;
* https://cloud.google.com/bigquery/docs/slots-autoscaling-intro#monitor_autoscaling_with_information_schema&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
with DATE_BUCKET as (&lt;br /&gt;
  select cal_date&lt;br /&gt;
  FROM UNNEST(GENERATE_DATE_ARRAY(CAST(parse_date(&#039;%Y%m%d&#039;,&#039;20240601&#039;) as date), CAST(parse_date(&#039;%Y%m%d&#039;,&#039;20241111&#039;) as date), INTERVAL 1 DAY)) as cal_date&lt;br /&gt;
)&lt;br /&gt;
, RESERVATION_CHANGES as (&lt;br /&gt;
  select *&lt;br /&gt;
  from (&lt;br /&gt;
    SELECT datetime(change_timestamp, (&#039;PST8PDT&#039;)) change_timestamp_org,&lt;br /&gt;
           date(date_trunc(datetime(change_timestamp, (&#039;PST8PDT&#039;)), DAY)) as change_date,&lt;br /&gt;
           datetime(IFNULL(LAG(a.change_timestamp) OVER (partition by a.reservation_name ORDER BY a.change_timestamp DESC),CURRENT_TIMESTAMP()), (&#039;PST8PDT&#039;)) AS end_change_timestamp_org,&lt;br /&gt;
           date(datetime(IFNULL(LAG(a.change_timestamp) OVER (partition by a.reservation_name ORDER BY a.change_timestamp DESC),CURRENT_TIMESTAMP()), (&#039;PST8PDT&#039;))) AS end_change_date,&lt;br /&gt;
           project_id,&lt;br /&gt;
           reservation_name,&lt;br /&gt;
           ignore_idle_slots,&lt;br /&gt;
           action,&lt;br /&gt;
           slot_capacity,&lt;br /&gt;
           autoscale.current_slots,&lt;br /&gt;
           autoscale.max_slots,&lt;br /&gt;
           user_email,&lt;br /&gt;
           edition&lt;br /&gt;
    FROM `region-US`.INFORMATION_SCHEMA.RESERVATION_CHANGES a &lt;br /&gt;
  )&lt;br /&gt;
  where 1=1&lt;br /&gt;
  and action NOT IN (&#039;DELETE&#039;)&lt;br /&gt;
)&lt;br /&gt;
, DATE_BUCKET_RESERVATION_CHANGES as (&lt;br /&gt;
  select cal_date&lt;br /&gt;
        , case when cal_date &amp;gt; change_date then CAST(parse_timestamp(&#039;%Y-%m-%d %H:%M:%S&#039;, cal_date || &#039; 00:00:00&#039;) AS datetime)&lt;br /&gt;
               else change_timestamp_org&lt;br /&gt;
          end as change_timestamp_new&lt;br /&gt;
        , case when cal_date &amp;lt; end_change_date then CAST(parse_timestamp(&#039;%Y-%m-%d %H:%M:%S&#039;, date_add(cal_date, interval 1 day) || &#039; 00:00:00&#039;) AS datetime)&lt;br /&gt;
               else end_change_timestamp_org&lt;br /&gt;
          end as end_change_timestamp_new&lt;br /&gt;
        , R.project_id&lt;br /&gt;
        , R.reservation_name&lt;br /&gt;
        , R.ignore_idle_slots&lt;br /&gt;
        , R.action&lt;br /&gt;
        , R.slot_capacity&lt;br /&gt;
        , R.current_slots&lt;br /&gt;
        , R.max_slots&lt;br /&gt;
        , R.user_email&lt;br /&gt;
        , R.edition&lt;br /&gt;
  from DATE_BUCKET T&lt;br /&gt;
    join RESERVATION_CHANGES R&lt;br /&gt;
      on R.change_date &amp;lt;&amp;gt; R.end_change_date&lt;br /&gt;
     and cal_date &amp;gt;= R.change_date&lt;br /&gt;
     and cal_date &amp;lt;= R.end_change_date&lt;br /&gt;
  union all&lt;br /&gt;
  select cal_date&lt;br /&gt;
        , change_timestamp_org as change_timestamp_new&lt;br /&gt;
        , end_change_timestamp_org as end_change_timestamp_new&lt;br /&gt;
        , R.project_id&lt;br /&gt;
        , R.reservation_name&lt;br /&gt;
        , R.ignore_idle_slots&lt;br /&gt;
        , R.action&lt;br /&gt;
        , R.slot_capacity&lt;br /&gt;
        , R.current_slots&lt;br /&gt;
        , R.max_slots&lt;br /&gt;
        , R.user_email&lt;br /&gt;
        , R.edition&lt;br /&gt;
  from DATE_BUCKET T&lt;br /&gt;
    join RESERVATION_CHANGES R&lt;br /&gt;
      on R.change_date = R.end_change_date&lt;br /&gt;
     and cal_date = R.change_date&lt;br /&gt;
)&lt;br /&gt;
, tb_main as (&lt;br /&gt;
select change_timestamp_new&lt;br /&gt;
    , end_change_timestamp_new&lt;br /&gt;
    , TIMESTAMP_DIFF(end_change_timestamp_new,change_timestamp_new,SECOND) as diff&lt;br /&gt;
    , ceil(&lt;br /&gt;
          (UNIX_MILLIS(cast(end_change_timestamp_new as timestamp)) - UNIX_MILLIS(cast(change_timestamp_new as timestamp))) / 1000&lt;br /&gt;
          ) as diff_mill&lt;br /&gt;
    -- , TIMESTAMP_DIFF(end_change_timestamp_new,change_timestamp_new,millisecond) as diff_mill&lt;br /&gt;
    -- , TIMESTAMP_DIFF(end_change_timestamp_new,change_timestamp_new,MICROSECOND) as diff_micro&lt;br /&gt;
    , project_id&lt;br /&gt;
    , reservation_name&lt;br /&gt;
    , ignore_idle_slots&lt;br /&gt;
    , action&lt;br /&gt;
    , slot_capacity&lt;br /&gt;
    , current_slots&lt;br /&gt;
    , max_slots&lt;br /&gt;
    , user_email&lt;br /&gt;
    , edition&lt;br /&gt;
    , CASE WHEN edition=&#039;STANDARD&#039; THEN 0.04/60/60 &lt;br /&gt;
           WHEN edition=&#039;ENTERPRISE&#039; THEN 0.06/60/60 END PAYG_PRICING&lt;br /&gt;
from DATE_BUCKET_RESERVATION_CHANGES&lt;br /&gt;
where 1=1&lt;br /&gt;
-- and edition = &#039;STANDARD&#039;&lt;br /&gt;
order by cal_date desc, change_timestamp_new desc&lt;br /&gt;
)&lt;br /&gt;
SELECT project_id&lt;br /&gt;
     , edition&lt;br /&gt;
     , reservation_name&lt;br /&gt;
     , date(change_timestamp_new) as change_date&lt;br /&gt;
    --  , min(change_timestamp_new) change_timestamp_new&lt;br /&gt;
    --  , max(end_change_timestamp_new) end_change_timestamp_new&lt;br /&gt;
     , sum(slot_capacity*diff)*MAX(PAYG_PRICING) BASE_PRICING&lt;br /&gt;
     , sum(current_slots*diff)*MAX(PAYG_PRICING) AUTOSCALING_PRICING&lt;br /&gt;
     , sum(current_slots*diff) -- TIME 기준 &lt;br /&gt;
     , sum(current_slots*diff_mill) -- UNIX_MILLIS 기준&lt;br /&gt;
  FROM tb_main&lt;br /&gt;
  GROUP BY project_id, edition, reservation_name, change_date&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>19ksh88</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=BigQuery_AutoScaling_Usage_SQL&amp;diff=968</id>
		<title>BigQuery AutoScaling Usage SQL</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=BigQuery_AutoScaling_Usage_SQL&amp;diff=968"/>
		<updated>2024-11-11T06:26:36Z</updated>

		<summary type="html">&lt;p&gt;19ksh88: GCP 문서 참고사항 업데이트&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* BigQuery Capacity 사용 시 AutoScaling 사용량에 대한 모니터링 SQL &lt;br /&gt;
* GCP Billing 기준 TimeZone인 PST(태평양 표준시) 기준으로 TimeZone을 사용&lt;br /&gt;
* https://cloud.google.com/bigquery/docs/slots-autoscaling-intro#monitor_autoscaling_with_information_schema&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
with DATE_BUCKET as (&lt;br /&gt;
  select cal_date&lt;br /&gt;
  FROM UNNEST(GENERATE_DATE_ARRAY(CAST(parse_date(&#039;%Y%m%d&#039;,@DS_START_DATE) as date), CAST(parse_date(&#039;%Y%m%d&#039;,@DS_END_DATE) as date), INTERVAL 1 DAY)) as cal_date&lt;br /&gt;
)&lt;br /&gt;
, RESERVATION_CHANGES as (&lt;br /&gt;
  select *&lt;br /&gt;
  from (&lt;br /&gt;
    SELECT datetime(change_timestamp, (&#039;PST8PDT&#039;)) change_timestamp_org,&lt;br /&gt;
           date(date_trunc(datetime(change_timestamp, (&#039;PST8PDT&#039;)), DAY)) as change_date,&lt;br /&gt;
           datetime(IFNULL(LAG(a.change_timestamp) OVER (ORDER BY a.change_timestamp DESC),CURRENT_TIMESTAMP()), (&#039;PST8PDT&#039;)) AS end_change_timestamp_org,&lt;br /&gt;
           date(datetime(IFNULL(LAG(a.change_timestamp) OVER (ORDER BY a.change_timestamp DESC),CURRENT_TIMESTAMP()), (&#039;PST8PDT&#039;))) AS end_change_date,&lt;br /&gt;
           project_id,&lt;br /&gt;
           reservation_name,&lt;br /&gt;
           ignore_idle_slots,&lt;br /&gt;
           action,&lt;br /&gt;
           slot_capacity,&lt;br /&gt;
           autoscale.current_slots,&lt;br /&gt;
           autoscale.max_slots,&lt;br /&gt;
           user_email,&lt;br /&gt;
           edition&lt;br /&gt;
    FROM `ns-bill-data.region-asia-northeast3`.INFORMATION_SCHEMA.RESERVATION_CHANGES a&lt;br /&gt;
  -- WHERE  change_timestamp &amp;gt;= CAST(parse_timestamp(&#039;%Y%m%d %H:%M:%S&#039;, @DS_START_DATE || &#039; 00:00:00&#039;, &#039;PST8PDT&#039;) AS TIMESTAMP)&lt;br /&gt;
  )&lt;br /&gt;
  where 1=1&lt;br /&gt;
  and action NOT IN (&#039;DELETE&#039;)&lt;br /&gt;
  -- AND change_timestamp_org BETWEEN CAST(parse_timestamp(&#039;%Y%m%d %H:%M:%S&#039;, @DS_START_DATE || &#039; 00:00:00&#039;, &#039;PST8PDT&#039;) AS datetime)  AND  CAST(parse_timestamp(&#039;%Y%m%d %H:%M:%S&#039;, @DS_END_DATE || &#039; 23:59:59&#039;, &#039;PST8PDT&#039;) AS datetime)&lt;br /&gt;
)&lt;br /&gt;
, base2 as (&lt;br /&gt;
  select cal_date&lt;br /&gt;
        , case when cal_date &amp;gt; change_date then CAST(parse_timestamp(&#039;%Y-%m-%d %H:%M:%S&#039;, cal_date || &#039; 00:00:00&#039;) AS datetime)&lt;br /&gt;
               else change_timestamp_org&lt;br /&gt;
          end as change_timestamp_new&lt;br /&gt;
        , case when cal_date &amp;lt; end_change_date then CAST(parse_timestamp(&#039;%Y-%m-%d %H:%M:%S&#039;, date_add(cal_date, interval 1 day) || &#039; 00:00:00&#039;) AS datetime)&lt;br /&gt;
               else end_change_timestamp_org&lt;br /&gt;
          end as end_change_timestamp_new&lt;br /&gt;
        , base.project_id&lt;br /&gt;
        , base.reservation_name&lt;br /&gt;
        , base.ignore_idle_slots&lt;br /&gt;
        , base.action&lt;br /&gt;
        , base.slot_capacity&lt;br /&gt;
        , base.current_slots&lt;br /&gt;
        , base.max_slots&lt;br /&gt;
        , base.user_email&lt;br /&gt;
        , base.edition&lt;br /&gt;
  from DATE_BUCKET&lt;br /&gt;
    join RESERVATION_CHANGES&lt;br /&gt;
    on base.change_date &amp;lt;&amp;gt; base.end_change_date&lt;br /&gt;
    and cal_date &amp;gt;= base.change_date&lt;br /&gt;
    and cal_date &amp;lt;= base.end_change_date&lt;br /&gt;
&lt;br /&gt;
  union all&lt;br /&gt;
&lt;br /&gt;
  select cal_date&lt;br /&gt;
        , change_timestamp_org as change_timestamp_new&lt;br /&gt;
        , end_change_timestamp_org as end_change_timestamp_new&lt;br /&gt;
        , base.project_id&lt;br /&gt;
        , base.reservation_name&lt;br /&gt;
        , base.ignore_idle_slots&lt;br /&gt;
        , base.action&lt;br /&gt;
        , base.slot_capacity&lt;br /&gt;
        , base.current_slots&lt;br /&gt;
        , base.max_slots&lt;br /&gt;
        , base.user_email&lt;br /&gt;
        , base.edition&lt;br /&gt;
  from DATE_BUCKET&lt;br /&gt;
    join RESERVATION_CHANGES&lt;br /&gt;
    on base.change_date = base.end_change_date&lt;br /&gt;
    and cal_date = base.change_date&lt;br /&gt;
  -- order by cal_date desc, change_timestamp_new desc&lt;br /&gt;
&lt;br /&gt;
)&lt;br /&gt;
select change_timestamp_new&lt;br /&gt;
      , end_change_timestamp_new&lt;br /&gt;
      , TIMESTAMP_DIFF(end_change_timestamp_new,change_timestamp_new,SECOND) as diff&lt;br /&gt;
      , project_id&lt;br /&gt;
      , reservation_name&lt;br /&gt;
      , ignore_idle_slots&lt;br /&gt;
      , action&lt;br /&gt;
      , slot_capacity&lt;br /&gt;
      , current_slots&lt;br /&gt;
      , max_slots&lt;br /&gt;
      , user_email&lt;br /&gt;
      , edition&lt;br /&gt;
from base2&lt;br /&gt;
where 1=1&lt;br /&gt;
order by cal_date desc, change_timestamp_new desc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>19ksh88</name></author>
	</entry>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=BigQuery_AutoScaling_Usage_SQL&amp;diff=967</id>
		<title>BigQuery AutoScaling Usage SQL</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=BigQuery_AutoScaling_Usage_SQL&amp;diff=967"/>
		<updated>2024-11-11T06:25:56Z</updated>

		<summary type="html">&lt;p&gt;19ksh88: Slot 사용량을 timestamp 기준에서 UNIX 기준으로 변경하여 계산&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* BigQuery Capacity 사용 시 AutoScaling 사용량에 대한 모니터링 SQL &lt;br /&gt;
* GCP Billing 기준 TimeZone인 PST(태평양 표준시) 기준으로 TimeZone을 사용&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
with DATE_BUCKET as (&lt;br /&gt;
  select cal_date&lt;br /&gt;
  FROM UNNEST(GENERATE_DATE_ARRAY(CAST(parse_date(&#039;%Y%m%d&#039;,@DS_START_DATE) as date), CAST(parse_date(&#039;%Y%m%d&#039;,@DS_END_DATE) as date), INTERVAL 1 DAY)) as cal_date&lt;br /&gt;
)&lt;br /&gt;
, RESERVATION_CHANGES as (&lt;br /&gt;
  select *&lt;br /&gt;
  from (&lt;br /&gt;
    SELECT datetime(change_timestamp, (&#039;PST8PDT&#039;)) change_timestamp_org,&lt;br /&gt;
           date(date_trunc(datetime(change_timestamp, (&#039;PST8PDT&#039;)), DAY)) as change_date,&lt;br /&gt;
           datetime(IFNULL(LAG(a.change_timestamp) OVER (ORDER BY a.change_timestamp DESC),CURRENT_TIMESTAMP()), (&#039;PST8PDT&#039;)) AS end_change_timestamp_org,&lt;br /&gt;
           date(datetime(IFNULL(LAG(a.change_timestamp) OVER (ORDER BY a.change_timestamp DESC),CURRENT_TIMESTAMP()), (&#039;PST8PDT&#039;))) AS end_change_date,&lt;br /&gt;
           project_id,&lt;br /&gt;
           reservation_name,&lt;br /&gt;
           ignore_idle_slots,&lt;br /&gt;
           action,&lt;br /&gt;
           slot_capacity,&lt;br /&gt;
           autoscale.current_slots,&lt;br /&gt;
           autoscale.max_slots,&lt;br /&gt;
           user_email,&lt;br /&gt;
           edition&lt;br /&gt;
    FROM `ns-bill-data.region-asia-northeast3`.INFORMATION_SCHEMA.RESERVATION_CHANGES a&lt;br /&gt;
  -- WHERE  change_timestamp &amp;gt;= CAST(parse_timestamp(&#039;%Y%m%d %H:%M:%S&#039;, @DS_START_DATE || &#039; 00:00:00&#039;, &#039;PST8PDT&#039;) AS TIMESTAMP)&lt;br /&gt;
  )&lt;br /&gt;
  where 1=1&lt;br /&gt;
  and action NOT IN (&#039;DELETE&#039;)&lt;br /&gt;
  -- AND change_timestamp_org BETWEEN CAST(parse_timestamp(&#039;%Y%m%d %H:%M:%S&#039;, @DS_START_DATE || &#039; 00:00:00&#039;, &#039;PST8PDT&#039;) AS datetime)  AND  CAST(parse_timestamp(&#039;%Y%m%d %H:%M:%S&#039;, @DS_END_DATE || &#039; 23:59:59&#039;, &#039;PST8PDT&#039;) AS datetime)&lt;br /&gt;
)&lt;br /&gt;
, base2 as (&lt;br /&gt;
  select cal_date&lt;br /&gt;
        , case when cal_date &amp;gt; change_date then CAST(parse_timestamp(&#039;%Y-%m-%d %H:%M:%S&#039;, cal_date || &#039; 00:00:00&#039;) AS datetime)&lt;br /&gt;
               else change_timestamp_org&lt;br /&gt;
          end as change_timestamp_new&lt;br /&gt;
        , case when cal_date &amp;lt; end_change_date then CAST(parse_timestamp(&#039;%Y-%m-%d %H:%M:%S&#039;, date_add(cal_date, interval 1 day) || &#039; 00:00:00&#039;) AS datetime)&lt;br /&gt;
               else end_change_timestamp_org&lt;br /&gt;
          end as end_change_timestamp_new&lt;br /&gt;
        , base.project_id&lt;br /&gt;
        , base.reservation_name&lt;br /&gt;
        , base.ignore_idle_slots&lt;br /&gt;
        , base.action&lt;br /&gt;
        , base.slot_capacity&lt;br /&gt;
        , base.current_slots&lt;br /&gt;
        , base.max_slots&lt;br /&gt;
        , base.user_email&lt;br /&gt;
        , base.edition&lt;br /&gt;
  from DATE_BUCKET&lt;br /&gt;
    join RESERVATION_CHANGES&lt;br /&gt;
    on base.change_date &amp;lt;&amp;gt; base.end_change_date&lt;br /&gt;
    and cal_date &amp;gt;= base.change_date&lt;br /&gt;
    and cal_date &amp;lt;= base.end_change_date&lt;br /&gt;
&lt;br /&gt;
  union all&lt;br /&gt;
&lt;br /&gt;
  select cal_date&lt;br /&gt;
        , change_timestamp_org as change_timestamp_new&lt;br /&gt;
        , end_change_timestamp_org as end_change_timestamp_new&lt;br /&gt;
        , base.project_id&lt;br /&gt;
        , base.reservation_name&lt;br /&gt;
        , base.ignore_idle_slots&lt;br /&gt;
        , base.action&lt;br /&gt;
        , base.slot_capacity&lt;br /&gt;
        , base.current_slots&lt;br /&gt;
        , base.max_slots&lt;br /&gt;
        , base.user_email&lt;br /&gt;
        , base.edition&lt;br /&gt;
  from DATE_BUCKET&lt;br /&gt;
    join RESERVATION_CHANGES&lt;br /&gt;
    on base.change_date = base.end_change_date&lt;br /&gt;
    and cal_date = base.change_date&lt;br /&gt;
  -- order by cal_date desc, change_timestamp_new desc&lt;br /&gt;
&lt;br /&gt;
)&lt;br /&gt;
select change_timestamp_new&lt;br /&gt;
      , end_change_timestamp_new&lt;br /&gt;
      , TIMESTAMP_DIFF(end_change_timestamp_new,change_timestamp_new,SECOND) as diff&lt;br /&gt;
      , project_id&lt;br /&gt;
      , reservation_name&lt;br /&gt;
      , ignore_idle_slots&lt;br /&gt;
      , action&lt;br /&gt;
      , slot_capacity&lt;br /&gt;
      , current_slots&lt;br /&gt;
      , max_slots&lt;br /&gt;
      , user_email&lt;br /&gt;
      , edition&lt;br /&gt;
from base2&lt;br /&gt;
where 1=1&lt;br /&gt;
order by cal_date desc, change_timestamp_new desc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>19ksh88</name></author>
	</entry>
</feed>