2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

BigQueryで扱うクエリ色々

Posted at

案件先でBigQueryを扱う中で、いくつか学べたデータ型などがあるのでご紹介していきます。

INTEGERとNUMERICの違い

データの数値型の違いがイマイチよくわからなかったのですが、
数値型には以下の種類があるようです。

INT64(エイリアス: INT、SMALLINT、INTEGER、BIGINT、TINYINT、BYTEINT)
NUMERIC(エイリアス: DECIMAL)
BIGNUMERIC(エイリアス: BIGDECIMAL)
FLOAT64

なんの違いがあるのかというのが以下になります。

INTEGER = 整数型

整数型というのは小数部分を持たない数値の型を指します。

123
0xABC
-123

NUMERIC = 小数型

小数型の値は、固定の小数点以下の精度とスケールを持つ数値です。精度は、数値に含まれる桁数です。スケールは小数点以下の桁数です。

SELECT NUMERIC '0';
SELECT NUMERIC '123456';
SELECT NUMERIC '-3.14';
SELECT NUMERIC '-0.54321';
SELECT NUMERIC '1.23456e05';
SELECT NUMERIC '-9.876e-3';

NUMERICの方が整数型も扱える分、データ型の範囲が大きいので、データの幅が大きいば場合はこちらを使ったほうが良いです。

SAFE_CASTとCASTの違い

次は変換関数の違いです。正直これは違いが分かっても用途がわからないと難しかったです。

CAST

CAST構文は、式の結果の型を他の型に変換する必要があることを示す目的でクエリが使用されます。

CAST を使用する場合、Google 標準 SQL でそのキャスティングを実行できなければクエリは失敗します。このようなエラーの発生を防ぐには、SAFE_CAST を使用します。

次のクエリを実行すると、x が 1 の場合は "true" になります。その他の非 NULL 値の場合は "false" に、x が NULL の場合は NULL になります。

CAST(x=1 AS STRING)

SAFE_CAST

CAST を使用する場合、Google 標準 SQL でそのキャスティングを実行できなければクエリは失敗します。たとえば、次のクエリによってエラーが発生します。

SELECT CAST("apple" AS INT64) AS not_a_number;

このようなエラーからクエリを守るには、SAFE_CAST を使用できます。SAFE_CAST はエラーの代わりに NULL を返すという点を除き、CAST とまったく同じです。

SELECT SAFE_CAST("apple" AS INT64) AS not_a_number;

+--------------+
| not_a_number |
+--------------+
| NULL         |
+--------------+

文字列関数

CONCAT

1 つ以上の値を 1 つに連結します。すべての値が BYTES か、STRING にキャスト可能なデータ型である必要があります。
入力引数が NULL の場合、この関数は NULL を返します。

SELECT CONCAT('T.P.', ' ', 'Bar') as author;

+---------------------+
| author              |
+---------------------+
| T.P. Bar            |
+---------------------+

With Employees AS
  (SELECT
    'John' AS first_name,
    'Doe' AS last_name
  UNION ALL
  SELECT
    'Jane' AS first_name,
    'Smith' AS last_name
  UNION ALL
  SELECT
    'Joe' AS first_name,
    'Jackson' AS last_name)

SELECT
  CONCAT(first_name, ' ', last_name)
  AS full_name
FROM Employees;

+---------------------+
| full_name           |
+---------------------+
| John Doe            |
| Jane Smith          |
| Joe Jackson         |
+---------------------+

参考サイト

まとめ

まだSQLの少しの知識を扱っただけなのですが、日々アウトプット&インプット頑張ります!

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?