web-dev-qa-db-fra.com

Définir des variables Big Query comme mysql

quel est l'équivalent bigquery des variables 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";
15
jake

Vous pouvez utiliser une clause WITH. Ce n'est pas idéal, mais ça fait le travail.

-- 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)

Ou encore moins verbeux:

#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
14
user1699188

Aucune variable ne doit être définie dans BigQuery, mais vous pouvez ajouter une demande de fonctionnalité: https://code.google.com/p/google-bigquery/issues/list?q=label:Feature-Request

6
Felipe Hoffa

Vous voudrez peut-être examiner les requêtes paramétrées de BigQuery. BigQuery prend en charge les paramètres de requête afin d'empêcher l'injection SQL lorsque les requêtes sont construites à l'aide d'une entrée utilisateur. Cette fonctionnalité est uniquement disponible avec la syntaxe SQL standard.

https://cloud.google.com/bigquery/docs/parameterized-queries

1
Bongsky

Voici une solution utilisant une fonction définie par l'utilisateur . Déclarer des variables et les appeler ressemble davantage à Mysql.

Vous pouvez appeler vos variables en utilisant la fonction var("your variable name") de cette façon:

#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")

Si votre variable n'est pas une chaîne, définissez-la en tant que chaîne, appelez-la avec var et safe_cast à votre type:

#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)
0
thsr