mysql과 같은 Big Query 변수 설정
mysql 변수와 동등한 빅쿼리는 무엇입니까?
SET @fromdate = '2014-01-01 00:00:00', -- dates for after 2013
@todate='2015-01-01 00:00:00',
@bfromdate = '2005-01-01 00:00:00', -- dates for before 2013
@btodate = '2005-01-01 00:00:00',
@achfromdate = '2013-01-01 00:00:00', -- dates for ACH without submit time in 2013
@achtodate = '2013-01-01 00:00:00',
@currency="USD";
이제 빅쿼리에서 변수를 사용할 수 있습니다.제공한 문을 실행하려면 다음을 사용해야 합니다.DECLARE
:
DECLARE fromdate TIMESTAMP DEFAULT '2014-01-01 00:00:00'; -- dates for after 2013
DECLARE todate TIMESTAMP DEFAULT '2015-01-01 00:00:00';
DECLARE bfromdate TIMESTAMP DEFAULT '2005-01-01 00:00:00'; -- dates for before 2013
DECLARE btodate TIMESTAMP DEFAULT '2005-01-01 00:00:00';
DECLARE achfromdate TIMESTAMP DEFAULT '2013-01-01 00:00:00'; -- dates for ACH without submit time in 2013
DECLARE achtodate TIMESTAMP DEFAULT '2013-01-01 00:00:00';
DECLARE currency STRING DEFAULT "USD";
선언한 후 문장에서 변수를 사용할 수 있습니다. 예:
DECLARE fromdate TIMESTAMP DEFAULT '2014-01-01 00:00:00'; -- dates for after 2013
DECLARE todate TIMESTAMP DEFAULT '2015-01-01 00:00:00';
SELECT FORMAT('From %t to %t', fromdate, todate);
스크립팅 설명서도 참조하십시오.
WITH 조항을 사용할 수 있습니다.이상적인 건 아니지만, 일을 끝내게 해줍니다.
-- Set your variables here
WITH vars AS (
SELECT '2018-01-01' as from_date,
'2018-05-01' as to_date
)
-- Then use them by pulling from vars with a SELECT clause
SELECT *
FROM your_table
WHERE date_column BETWEEN
CAST((SELECT from_date FROM vars) as date)
AND
CAST((SELECT to_date FROM vars) as date)
더 이상 말이 안 되는 것도 있습니다.
#standardSQL
-- Set your variables here
WITH vars AS (
SELECT DATE '2018-01-01' as from_date,
DATE '2018-05-01' as to_date
)
-- Then use them by pulling from vars with a SELECT clause
SELECT *
FROM your_table, vars
WHERE date_column BETWEEN from_date AND to_date
BigQuery에 'variables'을(를) 설정할 수는 없지만 기능 요청을 추가할 수 있습니다. https://code.google.com/p/google-bigquery/issues/list?q=label:Feature-Request
BigQuery의 Parameterized Query를 조사하는 것을 고려해 볼 수 있습니다.BigQuery는 사용자 입력을 사용하여 쿼리를 구성할 때 SQL 주입을 방지할 수 있도록 쿼리 매개 변수를 지원합니다.이 기능은 표준 SQL 구문에서만 사용할 수 있습니다.
https://cloud.google.com/bigquery/docs/parameterized-queries
다음은 사용자 정의 기능을 이용한 솔루션입니다.변수를 선언하고 호출하는 것은 Mysql과 더 유사합니다.
함수를 사용하여 변수를 호출할 수 있습니다.var("your variable name")
이런 식으로:
#standardSQL
-- Set your variables here
CREATE TEMP FUNCTION var(str STRING)
RETURNS STRING
LANGUAGE js AS """
var result = {
'fromdate': '2014-01-01 00:00:00', // dates for after 2013
'todate': '2015-01-01 00:00:00',
'bfromdate': '2005-01-01 00:00:00', // dates for before 2013
'btodate': '2005-01-01 00:00:00',
'achfromdate': '2013-01-01 00:00:00', // dates for ACH without submit time in 2013
'achtodate': '2013-01-01 00:00:00',
'currency': 'USD',
'minimumamount': '3.50',
'default': 'undefined'
};
return result[str] || result['default'];
""";
-- Then use them by using the function var("your variable name")
SELECT *
FROM your_table
WHERE date_column BETWEEN var("fromdate") AND var("todate")
변수가 문자열이 아닌 경우 문자열로 설정하고 var와 함께 호출한 후 safe_cast를 입력합니다.
#standardSQL
CREATE TEMP FUNCTION var(str STRING)
RETURNS STRING
LANGUAGE js AS """
var result = {
'minimumamount': '3.50',
'default': 'undefined'
};
return result[str] || result['default'];
""";
SELECT *
FROM your_table
WHERE amount > safe_cast(var("minimumamount") AS FLOAT64)
@엘리엇의 대답은 훌륭합니다.그러나 어떤 사람이 (하드코드화된 값이 아닌) 특정 식의 값을 가진 변수를 설정하고자 한다면,SET
와 함께 사용되어야 합니다.DECLARE
.
아래는 동적 날짜를 선언하는 예입니다.
DECLARE start_date, end_date DATE;
SET (start_date, end_date) = (
DATE_SUB(CURRENT_DATE(), INTERVAL 14 DAY),
DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY)
);
SELECT start_date, end_date;
참조: 빅쿼리 문서
언급URL : https://stackoverflow.com/questions/29759628/setting-big-query-variables-like-mysql
'sourcecode' 카테고리의 다른 글
jQuery를 사용하여 cs ":After" 선택기에 액세스합니다. (0) | 2023.10.06 |
---|---|
Perl의 DBI를 사용하여 SQL 주입 공격을 방지하려면 어떻게 해야 합니까? (0) | 2023.10.06 |
도구: Android 매니페스트에서 교체하지 않음 (0) | 2023.10.06 |
Larvel 마이그레이션을 통해 열의 기본값 변경 (0) | 2023.10.01 |
행을 열로 동적으로 변환하는 Mysql 쿼리 (0) | 2023.10.01 |