コメント


Legacy SQL の制約
Legacy SQL は主にクエリ（SELECT）用途に設計されており、テーブルの作成やスキーマ定義などの DDL 操作はサポートされていません。

そのため、CREATE TABLE や SELECT ... INTO を使用してテーブルを作成しようとすると、構文エラーが発生します。

代替策として、WebUIではレガシーSQLモードで、select * from tableを利用し、出力先は新テーブルに設定し、作成することは可能です。



```sql:qiita.rb
#standardSQL
CREATE TABLE `dataset1.raw_legacy_types_table` (
  string_field     STRING,         -- variable-length UTF-8 text
  bytes_field      BYTES,          -- binary data
  integer_field    INT64,          -- 64-bit signed integer
  float_field      FLOAT64,        -- double-precision float
  numeric_field    NUMERIC,        -- exact decimal (38,9)
  bignumeric_field BIGNUMERIC,     -- extended decimal (38,19)
  boolean_field    BOOL,           -- true/false
  timestamp_field  TIMESTAMP,      -- absolute point in time
  date_field       DATE,           -- calendar date (no time)
  time_field       TIME,           -- time of day (no date)
  datetime_field   DATETIME,       -- date + time (no timezone)
  record_field     STRUCT<         -- nested record
                       nested_string STRING,
                       nested_integer INT64
                     >
);
```

```sql:qiita.rb
#standardSQL
INSERT INTO `dataset1.raw_legacy_types_table`
  (string_field,
   bytes_field,
   integer_field,
   float_field,
   numeric_field,
   bignumeric_field,
   boolean_field,
   timestamp_field,
   date_field,
   time_field,
   datetime_field,
   record_field)
VALUES
  -- Repeat this same VALUES clause 5 times
  (
    -- 100 Japanese characters
    REPEAT('あ', 100),
    -- 16 bytes of 0xFF
    FROM_BASE64('////////////////////'),
    -- Max 64-bit signed integer
    9223372036854775807,
    -- Max double‐precision float
    1.7976931348623157e308,
    -- Max NUMERIC (38,9)
    99999999999999999999999999999.999999999,
    -- Max BIGNUMERIC (38,19)
    999999999999999999.999999999999999999,
    -- Boolean extreme
    TRUE,
    -- Large timestamp value
    TIMESTAMP '9999-12-31 23:59:59+00',
    -- Max civil date
    DATE '9999-12-31',
    -- Max time of day
    TIME '23:59:59.999999',
    -- Max civil datetime
    DATETIME '9999-12-31 23:59:59.999999',
    -- Nested STRUCT with its own extremes
    STRUCT(
      REPEAT('あ', 100) AS nested_string,
      9223372036854775807        AS nested_integer
    )
  )
  ```

```sql:qiita.rb
  CREATE OR REPLACE TABLE `your_dataset.test_boundary_special` (
  col_numeric    NUMERIC,
  col_bignumeric BIGNUMERIC,
  col_int64      INT64,
  col_float64    FLOAT64,
  col_array      ARRAY<STRING>,
);

INSERT INTO `your_dataset.test_boundary_special` VALUES
--  2-2. 極限／特殊値テスト
(
  -- NUMERIC の最大精度値
  99999999999999999999999999999.99999999,
  -- BIGNUMERIC の大きな値（精度 38, スケール 38 の範囲内）
  99999999999999999999999999999999999999.99999999999999999999999999999999999999,
  -- INT64 の最大値
  9223372036854775807,
  -- FLOAT64 の無限大（+Inf）
  CAST('Infinity' AS FLOAT64),
);
```


```sql:qiita.rb
-- FLOAT64 の境界値・特殊値をテストする INSERT 文
INSERT INTO `your_dataset.test_type_mapping` (col_float64) VALUES
  -- 最大（正）値
  (CAST('1.7976931348623157E308'   AS FLOAT64)),
  -- 最小（負）値
  (CAST('-1.7976931348623157E308'  AS FLOAT64)),
  -- 最小の正規化数（正の最小“ノーマル”数）
  (CAST('2.2250738585072014E-308'  AS FLOAT64)),
  -- 最小の非正規化数（正の最小“デノーマル”数）
  (CAST('5e-324'                   AS FLOAT64)),
  -- 正のゼロ
  (CAST('0.0'                      AS FLOAT64)),
  -- 負のゼロ
  (CAST('-0.0'                     AS FLOAT64)),
  -- 正の無限大
  (CAST('Infinity'                 AS FLOAT64)),
  -- 負の無限大
  (CAST('-Infinity'                AS FLOAT64)),
  -- NaN（Not a Number）
  (CAST('NaN'                      AS FLOAT64));
```

```sql:qiita.rb
-- 3-12. 各種日本語コンテンツを1行にまとめたテスト用 ARRAY
INSERT INTO `your_dataset.test_type_mapping` (col_array) VALUES
(
  [
    -- ひらがな・カタカナ・漢字
    'こんにちは', 'カタカナ', '漢字テスト',
    -- 長い日本語文章（約250文字）
    REPEAT('長い日本語文テスト。', 50),
    -- 改行コードと制御文字
    '行1\n行2', '制御\u0000文字',
    -- 絵文字と日本語の混合
    'テスト😊', '🍣寿司', '東京2025',
    -- 空文字×2
    '', '',
    -- 端スペース・全角スペース
    '前後スペース', '　全角スペース　'
  ]
);
```