書式設定と解析のための Datetime パターン
Spark での datetime の使用には、幾つかの一般的なシナリオがあります:
-
CSV/JSON データソースは、datetime コンテンツの解析と書式にパターン文字列を使います。
-
StringType
へ/からDateType
またはTimestampType
の変換に関する datetime 関数。例えば、unix_timestamp
、date_format
、to_unix_timestamp
、from_unixtime
、to_date
、to_timestamp
、from_utc_timestamp
、to_utc_timestamp
など。
Spark は、以下の表のパターン文字を使って、date と timestamp の解析と書式を行います:
シンボル | 意味 | 紹介 | 例 |
---|---|---|---|
G | era | text | AD; Anno Domini |
y | year | year | 2020; 20 |
D | day-of-year | number(3) | 189 |
M/L | month-of-year | month | 7; 07; Jul; July |
d | day-of-month | number(3) | 28 |
Q/q | quarter-of-year | number/text | 3; 03; Q3; 3rd quarter |
E | day-of-week | text | Tue; Tuesday |
F | aligned day of week in month | number(1) | 3 |
a | am-pm-of-day | am-pm | PM |
h | clock-hour-of-am-pm (1-12) | number(2) | 12 |
K | hour-of-am-pm (0-11) | number(2) | 0 |
k | clock-hour-of-day (1-24) | number(2) | 0 |
H | hour-of-day (0-23) | number(2) | 0 |
m | minute-of-hour | number(2) | 30 |
s | second-of-minute | number(2) | 55 |
S | fraction-of-second | fraction | 978 |
V | time-zone ID | zone-id | America/Los_Angeles; Z; -08:30 |
z | time-zone name | zone-name | Pacific Standard Time; PST |
O | localized zone-offset | offset-O | GMT+8; GMT+08:00; UTC-08:00; |
X | zone-offset ‘Z’ for zero | offset-X | Z; -08; -0830; -08:30; -083015; -08:30:15; |
x | zone-offset | offset-x | +0000; -08; -0830; -08:30; -083015; -08:30:15; |
Z | zone-offset | offset-Z | +0000; -0800; -08:00; |
‘ | escape for text | デリミタ | |
’‘ | single quote | literal | ’ |
[ | optional section start | ||
] | optional section end |
パターン文字の数がフォーマットを決定します。
-
Text: テキストのスタイルは使われるパターン文字の数に基づいて決定されます。パターン文字が4未満の場合、短いテキスト形式が使われます。通常は省略形です。例えば、曜日の月曜日は “Mon” を出力する場合があります。正確に4つのパターン文字列は、完全なテキスト形式が使われます。通常は完全な記述です。例えば、曜日の月曜日は “Monday” を出力する場合があります。5文字以上は失敗します。
-
Number(n): ここでの n は、この型の datetime パターンを使える文字の最大数を表します。文字数が1の場合、値は最小桁数でパディング無しで出力されます。それ以外の場合、桁数は出力フィールドの幅として使われ、必要に応じて値に0がパディングされます。
-
Number/Text: パターン文字の数が3以上の場合は、上記のテキストルールを使います。それ以外の場合、上記の数値ルールを使います。
-
分数: 1つ以上(9まで)の連続する
'S'
文字、例えばSSSSSS
、を使って、秒の小数部を解析および整形します。解析の場合、許容される小数部の長さは、[1、連続する ‘S’ の数]です。整形の場合、小数部の長さは、連続する ‘S’ の数に0が埋め込まれます。Spark は、最大6桁の有効桁数を持つマイクロ秒精度の datetme をサポートしますが、ナノ秒を超過部分は切り捨てて解析できます。 -
Year: 文字の数により、パディングが使われる最少のフィールド幅が決まります。文字の数が2の場合、2桁の省略形が使われます。出力の場合、右端の2桁が出力されます。解析の場合、これは2000のベース幅を使って解析され、2000から2099の範囲内の年になります。文字の数が4未満(2未満ではない)の場合、符号は負の年についてのみ出力されます。それ以外の場合、‘G’ が存在しない時にパッド幅を超えると、符号が出力されます。7 or more letters will fail.
- Month: 数値/テキストのルールに従います。テキストフォームは文字によって異なります - ‘M’ は ‘標準’ 形式を表し、‘L’ は ‘スタンドアローン’ 形式を表します。これら2つの形式は、一部の特定の言語でのみ異なります。例えば、ロシア語では、‘Июль’ は7月のスタンドアローン形式で、‘Июля’ は標準形式です。以下はサポートされる全てのパターン文字の例:
'M'
または'L'
: 1から始まる年の月数。‘M’ と ‘L’ には違いはありません。1から9までの月はパディング無しで出力されます。spark-sql> select date_format(date '1970-01-01', "M"); 1 spark-sql> select date_format(date '1970-12-01', "L"); 12
'MM'
または'LL'
: 1から始まる月の月数。1-9月にはゼロパディングが追加されます。spark-sql> select date_format(date '1970-1-01', "LL"); 01 spark-sql> select date_format(date '1970-09-01', "MM"); 09
'MMM'
: 標準形式の短いテキスト表現。月のパターンは、スタンドアロンの月ではなく date パターンの一部である必要があります。ただし英語のように標準形式とスタンドアローン形式に違いが無い locale を除きます。spark-sql> select date_format(date '1970-01-01', "d MMM"); 1 Jan spark-sql> select to_csv(named_struct('date', date '1970-01-01'), map('dateFormat', 'dd MMM', 'locale', 'RU')); 01 янв.
'LLL'
: スタンドアローン形式での短いテキスト表現。他の date フィールドの無い月のみを整形/解析するために使われる必要があります。spark-sql> select date_format(date '1970-01-01', "LLL"); Jan spark-sql> select to_csv(named_struct('date', date '1970-01-01'), map('dateFormat', 'LLL', 'locale', 'RU')); янв.
'MMMM'
: 標準形式の完全な月のテキスト表現。date/timestamp の一部として月を解析/整形するために使われます。spark-sql> select date_format(date '1970-01-01', "d MMMM"); 1 January spark-sql> select to_csv(named_struct('date', date '1970-01-01'), map('dateFormat', 'd MMMM', 'locale', 'RU')); 1 января
'LLLL'
: スタンドアローン形式の完全な月のテキストの表現このパターンは、月のみの整形/解析に使うことができます。spark-sql> select date_format(date '1970-01-01', "LLLL"); January spark-sql> select to_csv(named_struct('date', date '1970-01-01'), map('dateFormat', 'LLLL', 'locale', 'RU')); январь
-
am-pm: am-pm-of-day を出力します。パターン文字数は1でなければなりません。
-
Zone ID(V): タイムゾーン ID の表示を出力します。パターン文字数は2でなければなりません。
-
Zone names(z): タイムゾーン ID の表示テキスト名を出力します。文字数が1、2、3の場合、短い名前が出力されます。文字数が4の場合、長い名前が出力されます。5文字以上は失敗します。
-
Offset X and x: パターン文字の数に基づいてオフセットを整形します。1文字は ‘+01’ などの時間のみを出力します。分が0以外の場合は、‘+0130’ などの分も出力されます。2文字は、‘+0130’ のように、コロン無しで時間と分を出力します。3文字は、‘+01:30’ のように、コロン付きの時間と分を出力します。4文字は、‘+013015’ のように、コロン無しで時間と分とオプションの秒を出力します。5文字は、‘+01:30:15’ のように、コロン付きの時間と分とオプションの秒を出力します。6文字以上は失敗します。出力のオフセットが0の場合、パターン文字 ‘X’ (大文字) は ‘Z’ を出力し、パターン文字 ‘x’ (小文字) は ‘+00’、‘+0000’、‘+00:00’ を出力します。
-
Offset O: パターン文字の数に基づいてローカライズされたオフセットを整形します。1文字は、ローカライズされたオフセットの短い形式を出力します。これは ‘GMT’ のようなローカライズされたオフセットテキストで、先頭に0が無い時間、オプションの2桁の分、0でない場合は秒、コロンです。例えば ‘GMT+8’。4文字は、完全な形式を出力します。これは ‘GMT‘ のようなローカライズされたオフセットテキスト、2桁の時間と分のフィールド、0で無い場合はオプションの秒フィールド、コロンです。例えば、‘GMT+08:00’。それ以外の数の場合は失敗します。
-
Offset Z: パターン文字の数に基づいてオフセットを整形します。1、2、3文字は、コロン無しで、時間と分を出力します。例えば ‘+0130’。オフセットが0の場合は、出力は ‘+0000’ です。4文字は、Offset-O の4文字に相当する、ローカライズされたオフセットの完全形式を出力します。オフセットが0の場合、出力は対応するローカライズされたオフセットテキストになります。5文字は、時間、分、0でない場合はオプションの秒、コロンを出力します。オフセットが0の場合は、‘Z’ を出力します。6文字以上は失敗します。
-
Optional section start and end:
[]
を使ってオプションセクションを出力し、ネストすることもできます。整形の間に、オプションのセクションにある場合でも、全ての有効なデータが出力されます。解析の間に、セクション全体が解析された文字列から欠落する場合があります。オプションのセクションは、[
で開始され、]
を使って(またはパターンの最後で)終了します。 - ‘E’、‘F’、‘q’、‘Q’ の記号は、datetime の整形のためだけに使用できます。例えば、
date_format
。datetime の解析には使うことができません。例えば、to_timestamp
。