SAP HANA データ型: 数値、文字列、小数

⚡ スマートサマリー

SAP HANAデータ型は、各列が格納できるものを定義し、日付時刻、数値、ブール値、文字列、バイナリ、ラージオブジェクト、および多値分類を網羅し、各マップping 特定の列ストアタイプへ。

  • 🗓️ 日付時刻の種類: DATE、TIME、SECONDDATE、TIMESTAMPは、保持する精度が異なります。
  • 🔢 数値範囲: TINYINTからBIGINTは整数を扱い、DECIMAL、SMALLDECIMAL、REAL、およびDOUBLEは小数を扱います。
  • 🔤 文字列: VARCHAR型はバイト列を格納し、NVARCHAR型はUnicode文字を格納しますが、どちらも最大5000バイトに制限されています。
  • 📦 大きなオブジェクト: BLOB、CLOB、NCLOB、TEXT、およびBINTEXTは、通常の列には大きすぎるデータを格納します。
  • 🔍 検索機能が有効になっています: TEXT、BINTEXT、およびSHORTTEXTは、全文検索をサポートしていますが、カラムストアテーブルでのみサポートされます。
  • ✍️ 識別子: 区切り文字付きの識別子は二重引用符で囲まれ、任意の文字を受け入れる。区切り文字なしの識別子は必ず文字で始まる必要がある。
  • ❝ 引用ルール: シングルクォーテーションは文字列値を区切り、ダブルクォーテーションは識別子を区切ります。

SAP HANAデータ型

この中の SAP HANA データ型チュートリアルでは、次のことを学習します。

1) SAP HANA データ型 – SAP HANA データ型には、日付時刻、数値データ型、ブール値、文字列、バイナリ データ型などが含まれます。

2) SAP HANA 識別子 – 区切られた識別子と区切られていない識別子

データ型 SAP HANA

In SAP HANAデータベース、 SQL データ型は以下のとおりです。

欠陥種類の識別 下位分類 SQL データ型 列ストアのタイプ デフォルト書式
日付と時刻のタイプ 日付 DATE CS_DAYDATE 「YYYY-MM-DD」
時間 タイム CS_SECONDTIME 「HH24:MI:SS」
XNUMX番目の日付 XNUMX回目 CS_LONGDATE 「YYYY-MM-DD HH24:MI:SS」
タイムスタンプ タイムスタンプ CS_SECONDDATE 「YYYY-MM-DD HH24:MI:SS.FFn」
数値型 小さな整数 タイイント CS_INT 8ビット符号なし整数、範囲0~255
小さい整数 小型 CS_INT 16ビット符号付き整数、範囲 -32,768 ~ 32,767
整数 整数 CS_INT 32ビット符号付き整数、範囲 -2,147,483,648 ~ 2,147,483,647
大きな整数 BIGINT CS_FIXED(18,0) 64ビット符号付き整数、範囲 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
10進数 DECIMAL(p,s)
p精度
Sスケール
CS_FIXED(ps,s) 精度 p の範囲は 1 ~ 38 です。
スケールsは0からpまでの範囲で、 SAP HANA 10 進データ型。
精度と位取りが指定されていない場合、DECIMAL は浮動小数点 XNUMX 進数になります。
小十進数 小十進数 CS_SDFLOAT これは浮動小数点の 1 進数です。 精度とスケールは、保存されている値に応じて、精度が 16 ~ 369、スケールが -368 ~ XNUMX の範囲内である必要があります。 SMALLDECIMAL は列ストア テーブルでのみサポートされます。
実数 リアル CS_FLOAT 単精度 32 ビット浮動小数点数
Double 数 ダブル CS_ダブル 倍精度64ビット浮動小数点数
フロート 浮動小数点(n) CS_ダブル これは32ビットまたは64ビットの実数です。nはビット数を指定し、1から53の範囲である必要があります。
ブーリアン ブーリアン ブーリアン CS_INT 真、偽、不明 (NULL)。
文字列 可変長文字列 VARCHAR(n) CS_STRING この HANA 文字列長データ型は可変長文字列であり、'n' は最大長をバイト単位で指定するもので、1 から 5000 までの整数です。
可変長 Unicode 文字 NVARCHAR(n) CS_STRING 可変長の Unicode 文字セット文字列。 文字数の最大長を示し、1 ~ 5000 の整数です。
英数字 アルファナム(n) CS_ALPHANUM 可変長の英数字。n は最大長を示し、1 ~ 127 の整数です。
短いテキスト 短いテキスト(n) CS_STRING これは可変長文字列であり、テキスト検索機能と文字列検索機能を提供します。このデータ型は列ストアテーブルには定義できますが、行テーブルには定義できません。
バイナリ型 バイナリテキスト VARBINARY(n) CS_RAW 指定された最大長のバイナリ データをバイト単位で保存します。n は最大長を示し、1 ~ 5000 の整数です。
LOB タイプ (ラージ オブジェクト タイプ) バイナリLOB BLOB CS_RAW 大量のバイナリデータ
キャラクターLOB CLOB CS_STRING ASCII文字データ
Unicode 文字 LOB NCLOB CS_STRING 大きな Unicode 文字オブジェクト
TEXT TEXT CS_STRING TEXT データ型はテキスト検索機能を提供します。 このデータ型は列ストア テーブルには定義できますが、行ストア テーブルには定義できません。
BINARYテキストデータ バイテキスト CS_STRING BINTEXT データ型は TEXT データ型に似ているため、テキスト検索機能をサポートしますが、バイナリ データを挿入することができます。 このデータ型は列テーブルには定義できますが、行テーブルには定義できません。
複数の値の型 配列 アレイ これは、各要素が XNUMX つの位置にのみ関連付けられている、同じデータ型の値のコレクションを格納します。 値が存在しない場合と同様に、配列には NULL 値を含めることができます。

正しい選択 SAP HANAデータ型

上記の表には利用可能なものが記載されています。適切な選択は、 SAP HANAはディスクベースのデータベースよりも効率的です。なぜなら、すべての列がメモリ上に存在し、サイズが大きすぎる型は各行で貴重なリソースを消費するからです。

ほとんどの決定は、以下の4つのルールで網羅されます。

  • 収まる最小の数値型を選択してください。 5つの値を取り得るステータスフラグには、INTEGERではなくTINYINTが必要です。10億行のテーブルでは、その差はギガバイト単位のメモリ使用量に相当します。
  • 現金は、現金でも二重現金でも保管してはいけません。 浮動小数点数は小数点以下の値を正確に表現できないため、合計値は通貨単位の小数点以下の値で変動します。精度とスケールを明示的に指定したDECIMAL型を使用してください。
  • VARCHARよりもNVARCHARを推奨します。 VARCHARはバイト数をカウントし、NVARCHARは文字数をカウントするため、非ASCIIテキストはVARCHARでは予期せず切り捨てられます。 SAP HANAのリリースでは、まさにこの理由からVARCHARをNVARCHARとして扱います。
  • 日付の精度を要件に合わせます。 日付を表す場合はDATE、時刻が重要な場合はSECONDDATE、そして秒以下の精度が本当に必要な場合はTIMESTAMPを使用します。各ステップを上位にするごとに、各行のストレージ容量が増加します。

大きなオブジェクト型には特に注意が必要です。BLOB または NCLOB 列は便利ですが、容量が大きく、TEXT または SHORTTEXT のテキスト検索は列ストアテーブルでのみ機能するため、ストレージの選択とデータ型の選択は関連しています。ストレージオプションについては、 SAP HANASQL について チュートリアル。

SAP HANA 識別子

識別子は名前を表すために使用されます。 SQL ステートメント (例: テーブル名、ビュー名、列名、インデックス名、シノニム名、プロシージャ名、関数名など)

識別子には XNUMX 種類あります SAP HANA: 区切り文字で区切られた識別子と区切り文字で区切られていない識別子。

  • 区切られた識別子 – デリミタで囲まれており、 Double 「」を引用します。識別子には、特殊文字を含む任意の文字を含めることができます。
  • 区切りのない識別子 – 区切られていない識別子 (テーブル名、列名) は文字で始まる必要があり、数字またはアンダースコア「_」以外の記号を含めることはできません。

区切り用の引用符は以下のXNUMX種類があります。

  • 一重引用符 (' ') – 文字列を区切るために使用されます。
  • Double クォーテーションマーク (" ")– 識別子の区切りに使用されます。

⚠️ 警告: 区切り文字のない識別子は、オブジェクト作成時に大文字に変換されます。例えば、employee という名前でテーブルを作成し、後で小文字の「employee」から選択しようとすると、保存されている名前が EMPLOYEE であるため失敗します。二重引用符は完全に避けるか、一貫して使用してください。

データ型変換とよくあるエラー

SAP HANAは互換性のある型間で自動的に変換を行いますが、暗黙的な型変換は、誤った結果やクエリの遅延を引き起こす隠れた原因となります。明示的な型変換は、意図を明確にします。

この処理は2つの関数によって行われます。CAST関数は値を指定された型に変換し、TO_DATE、TO_VARCHAR、TO_DECIMALおよびそれらの関連関数は、オプションの書式文字列を使用して変換します。

-- Explicit conversion with CAST
SELECT CAST('1234' AS INTEGER) FROM DUMMY;

-- Conversion with an explicit format
SELECT TO_DATE('2026-07-21', 'YYYY-MM-DD') FROM DUMMY;

-- Number to string with fixed decimals
SELECT TO_DECIMAL(1234.5678, 10, 2) FROM DUMMY;

変換問題のほとんどは、以下の4つのエラーが原因です。

  1. 数値オーバーフロー。 SMALLINT型に40000を挿入しようとすると、符号付き範囲が32,767で止まるため失敗します。メッセージには値ではなく列名が表示されているため、まず定義を確認してください。
  2. 文字列の切り捨て。 宣言された長さを超えるテキストを読み込むと、自動的に切り捨てられるのではなく、エラーが発生します。NVARCHAR型の場合は文字数を、VARCHAR型の場合はバイト数をカウントします。
  3. 日付形式が無効です。 TO_DATE 関数に誤ったパターンの文字列を渡すと失敗します。セッションのデフォルト値に頼るのではなく、必ずフォーマットマスクを指定してください。
  4. WHERE句における暗黙的な型変換。 文字型の列と数値型を比較す​​ると、行ごとに型変換が発生し、効率的なフィルタリングができなくなります。列ではなく定数を変換してください。

これらのフィルターで使用される比較記号については、 SAP HANAオペレーターより広いプラットフォームでは SAP HANAチュートリアル シリーズ。

よくあるご質問

VARCHARはバイト単位で制限値を計測し、NVARCHARはUnicode文字単位で制限値を計測します。ASCII以外の文字を含む可能性のあるテキストの場合、予期せず切り捨てられることがないため、NVARCHARを選択するのが安全です。

秒単位の精度で十分な場合は、SECONDDATEを使用してください。これはほとんどのビジネスイベントに対応できます。TIMESTAMPは小数点以下の秒数も追加するため、大きなテーブルの各行でより多くのストレージ容量を消費します。

はい。ソースファイルをプロファイリングすることで、実際の値の範囲、長さ、フォーマットが明らかになり、AIはそれに基づいて、防御的な過大なデフォルト値ではなく、各列に対して最小の安全な型を提案します。

はい。宣言された長さと実際に格納されている値を比較することで、縮小できる可能性のある列が明らかになります。HANAテーブルのすべての列はメモリに保持されるため、これは重要な点です。

TEXT、BINTEXT、およびSHORTTEXTは、テキスト検索機能を提供します。これら3つはすべて列ストアテーブルに限定されており、行ストアテーブルでは定義できません。