SAS SpeedyStore データコネクタ

SAS SpeedyStoreを使用して、SingleStoreとCASの間でデータを転送できます。

該当要素:CASLIBステートメント
PROC CASUTIL
制限事項:SAS Viyaプラットフォームの外部にあるSingleStoreデータベースには、このデータコネクタを使用しないでください。詳細については、2つのデータコネクタ: SingleStore標準を使用する場合とSAS SpeedyStoreを使用する場合を参照してください。
要件このデータコネクタを使用するには、SAS SpeedyStore (旧称SAS with SingleStore)のライセンスと配置が必要です)。SAS SpeedyStore: 管理と構成ガイドを参照してください。
ヒント:host=オプションには、子アグリゲーターエンドポイントを指定します。
例: SingleStoreデータベースとSAS Cloud Analytic Services間の接続を確立します。
caslib singlestorelib
   datasource=(
               srctype='singlestore'
               database='my_database'
               epDatabase='metadata_database'
               host='svc-sas-singlestore-cluster-dml'
               pass='my_password'
               port='3306'
               user='my_username'
   )
;

詳細

SingleStoreのデータコネクタオプション

SingleStoreのデータコネクタオプション

データコネクタオプション

デフォルト値

authenticationDomain=

なし

aggregatePushdown=

false

backingStore=

"INPLACEPREFERRED"

createMultipassColumn=

デフォルトは他の条件によって異なります。詳細については、オプションを参照してください。

createViewSnapshot=

"never"

database=

なし

epDatabase=

database=オプションの値。

epProperties=

なし

host=

なし

multipassMemory=

"cache"

password=

なし

port=

3306

saveMultipassColumn=

FALSE

srcType=

なし

SAS SpeedyStoreに統合されているSingleStoreデータには、"singlestore"を使用します。2つのデータコネクタ: SingleStore標準を使用する場合とSAS SpeedyStoreを使用する場合を参照してください。

ssl_ca=

SAS Viya構成から継承します。

udfDatabase=

database=オプションの値。

userName=

なし

シングルサインオンでのMicrosoft Azureへの認証

管理者は、Microsoft Entra ID (旧称Azure Active Directory)をOIDCプロバイダーとして構成することで、シングルサインオン認証を有効にすることができます。SAS SpeedyStoreの場合は追加のステップが必要です。構成ステップについては、Enabling Single Sign-On for Microsoft Azure (SAS SpeedyStore: Administration and Configuration Guide)を参照してください。

SingleStore caslibでシングルサインオン認証を使用する場合は、userName=、password=、およびauthenticationDomain=オプションを省略します。

シングルサインオン認証が有効になっていない場合は、userName=オプションとpassword=オプション、またはauthenticationDomain=オプションを指定して認証します。

SAS SpeedyStoreのサポート

SAS SpeedyStoreには、データに接続するための2つの主要コンポーネントが含まれています。

  • SAS SpeedyStoreデータコネクタを使用すると、CASは、SASに統合されているSingleStoreデータベースに保存されているテーブルにアクセスできます。製品SAS SpeedyStoreのライセンスを取得する必要があります。SAS SpeedyStore: 管理と構成ガイドを参照してください。Requirements for SAS SpeedyStore (System Requirements for the SAS Viya Platform)も参照してください。

    標準データコネクタは、外部SingleStoreデータベース内のテーブルにアクセスするためにも使用できます。詳細については、2つのデータコネクタ: SingleStore標準を使用する場合とSAS SpeedyStoreを使用する場合を参照してください。

  • SingleStore LIBNAMEステートメント接続により、SAS Compute ServerがSingleStore互換データソースにアクセスできるようになります。詳細については、LIBNAME Statement for SingleStore (SAS/ACCESS for Relational Databases: Reference)とこれに続くトピックを参照してください。

SAS SpeedyStoreデータコネクタには、次の利点があります。

  • SAS SpeedyStoreデータコネクタは、CASとSingleStore間の並列データ転送を提供します。並列データ転送により、非常に大きなテーブルのパフォーマンスを向上させることができます。
  • SAS In-Database Technologiesを使用することで、SAS SpeedyStoreデータコネクタは、SingleStoreで処理されるWHERE式と計算列を自動的にプッシュします。データベースでこれらの操作を実行すると、ネットワークを介して送信されるデータの量が減少します。

2つのデータコネクタ: SingleStore標準を使用する場合とSAS SpeedyStoreを使用する場合

SingleStoreでは、次の2つのデータコネクタを使用できます。

  • SingleStore標準データコネクタは、外部SingleStoreデータベースに接続するための標準機能を提供します。このデータコネクタを使用するには、srctype='singlestore_standard'を指定します。詳細については、SingleStore標準 データコネクタを参照してください。
  • SAS SpeedyStoreデータコネクタは、製品SAS SpeedyStoreのライセンスを取得している場合にのみ使用できます。このデータコネクタは、標準機能に加えて、並列データ転送とIn-Database機能を提供します。製品SAS SpeedyStoreには、SingleStoreの統合インスタンスが含まれています。このデータコネクタを使用するには、srctype='singlestore'を指定します。
    注: SAS SpeedyStoreがライセンスされているかどうかについては、サイト管理者にお問い合わせください。

2つのデータコネクタの使用に関するガイドラインを次に示します。

  • SAS SpeedyStoreがライセンスされていない場合は、SingleStore標準データコネクタを使用します。
  • SAS SpeedyStoreがライセンスされていても、SingleStoreデータベースがSASの外部にある場合は、SingleStore標準データコネクタを使用します。
  • SAS SpeedyStoreがライセンスされていて、SingleStoreデータベースがSASと統合されている場合は、SAS SpeedyStoreデータコネクタを使用します。

いくつかの重要な違いを次に示します。

  • 多くのオプションは、一方のデータコネクタでサポートされ、他方のデータコネクタではサポートされていません。各データコネクタについて記載されているオプションを参照してください。
  • 並列データ転送およびその他のIn-Database機能は、SingleStore標準データコネクタではなく、SAS SpeedyStoreデータコネクタによって提供されます。
  • データソースのシステム要件は異なる場合があり、その結果、動作が異なる可能性があります。SAS SpeedyStoreに統合されているSingleStoreバージョンは、SAS Viyaプラットフォームに最低限必要なバージョンより新しいバージョンである可能性があります。SAS SpeedyStoreで使用する内部データベースとして機能するように、外部SingleStoreデータベースを移動することはできないことに注意してください。

CAS機能の制限事項

次の動作のためにコードの調整が必要な場合があります。

  • データを作成するとき、圧縮オプションが無視されます。SingleStoreは、デフォルトでデータを圧縮します。SingleStore圧縮は、tableInfoアクションからの出力にはレポートされません。
  • 入力テーブルは、列ストアまたは行ストアにすることができます。出力テーブルは、常に列ストアです。
  • テーブルを編集すると、テーブルのコピーが作成されます。コピーは、スナップショットと呼ばれます。このコピーは、データの整合性を維持するのに役立ちます。コピーには、マルチパス処理用のマルチパス列が含まれています。CASは、元のテーブルと同じデータベースにスナップショットコピーを作成しようとします。スナップショットコピーを作成できない場合、操作は失敗します。たとえば、ユーザーのアクセス許可が不十分な場合、コピーを作成できません。
  • ビューを編集するには、オプションcreateViewSnapshot="onLoad"を設定する必要があります。デフォルト設定のcreateViewSnapshot="never"では、ビュー結果セットのスナップショットコピーを作成せずにビューがストリーミングされ、ビューを編集しようとするとエラーが発生します。SingleStoreビューの読み取りの詳細については、createViewSnapshot= データコネクタオプションを参照してください。
  • SASの外部ツールを使用してSingleStoreビューを作成し、そのビューがCASによって作成されたテーブルを参照する場合、ビュー内の一部の列属性はサポートされません。CASは、テーブルをSingleStoreに保存するときに、SAS出力形式やラベルなどの列属性と特定のデータ型属性を列コメントに保存します。ビューのSingleStore定義には列コメントは含まれません。したがって、ビューの基になるテーブルがCASによって作成された場合、ビューがCASにロードされるとき、列コメントに保存されている列属性はビュー定義の一部にはなりません。
  • WHERE式にはいくつかの要件があります。WHERE処理と計算列の制限事項を参照してください。
  • 欠損値は、SingleStoreにnull値として保存されます。また、SAS特殊欠損値はサポートされていないため、null値として保存されます。SingleStoreのnull値は、CASにストリーミングされるときにSAS欠損値に変換されます。
  • テーブル名と列名には4バイト文字は使用できません。これはSingleStoreの制限です。2025.04以降、4バイト文字がテーブルラベルと列ラベルでサポートされています。2024.10時点のSingleStoreのデフォルトエンコーディングは、utf8mb4です。テーブル内のマルチバイトデータの場合、列が十分な長さで定義されていることを確認する必要があります。切り捨てにより部分文字が発生し、ログにエラーが発生し、データベースへのデータの書き込みが失敗する可能性があります。詳細については、Character Set Considerations (SAS SpeedyStore: Administration and Configuration Guide)を参照してください。
  • GPU処理はサポートされていません。
  • table.saveアクションのsaveAttrs=パラメーターとtable.loadTableアクションのloadAttrs=パラメーターでは、拡張属性テーブルには通常、table-name.ATTRS.sashdatの命名規則があります。拡張属性テーブルがSingleStoreに保存されている場合、SASHDATファイル拡張子: table-name.ATTRSは使用されません。さらに、SingleStoreテーブル名は64文字に制限されています。.ATTRS接尾辞があるため、テーブル名は58文字に制限されています。
  • 列名の長さなど、その他の制限については、SingleStoreドキュメントWebサイトを参照してください。
  • table.tableInfoアクションは、Source Modified Time値に欠損値(.)を返します。
  • table.tableDetailsアクションは、行数とデータサイズのみを返します。その他の詳細は、0(ゼロ)として返されます。
  • table.saveアクションのgroupBy=パラメーターはサポートされません。
  • cdm.cdmアクションのseverityEst=パラメーターはサポートされていません。ただし、重要度モデルパラメーターの推定値は、severityStore=パラメーターを介して読み取ることができます。
  • image.flattenImagesアクションは、出力テーブルの列数が4K未満の場合にサポートされます。FlattenImagesは、入力画像のwidth * height * 3 + 1が4096以下の場合、4K列以下のテーブルを生成します。この値が4096より大きい場合、出力テーブルが作成され、テーブルがSingleStoreに保存されるときにエラーが生成されます。
  • 次のアクションに適用されるapplyRowOrder=TRUEパラメーターはサポートされていません。
    • クラスタリングアクションセット: kClus
    • ディシジョンツリーアクションセット: dtreeTrain、dtreePrune、dtreeSplit、dtreeScore、forestTrain、forestScore、gbtreeTrain、gbtreeScore
    • ファクタライゼーションマシンアクションセット: factmac
    • ロバストな多変量外れ値アクションセット: mvoutlier
    • 標本抽出とパーティション分割アクション セット: srs、stratified、oversample、kfold
    • サポートベクターマシンアクションセット: svmTrain
  • 次のアクションセットまたはアクションは現在サポートされていません。
    • audioアクションセット
    • deepLearnアクションセット
    • deepNeuralアクションセット
    • deepRnnアクションセット
    • graphSemiSupLearnアクションセット
    • langModelアクションセット
    • ldaTopicアクションセット
    • searchAnalyticsアクションセット
    • smartDataアクションセット

In-Database処理を使用したパフォーマンスの向上

In-Database処理の使用

In-Database処理は、次の状況で発生します。

  • WHERE式または計算列を使用すると、SingleStoreに自動的に処理が渡されます。
    • 一部のWHERE式は、SingleStoreによって直接処理されます。一部は、SingleStoreで実行されるSAS Embedded Processによって処理されます。WHERE式を使用すると、データがフィルタリングされ、CASにストリーミングされるデータの量を減らすことができます。
    • すべての計算列は、SingleStoreで実行されるSAS Embedded Processによって処理されます。計算列は、アクションのcomputedVarsProgram=パラメーターで指定されます。詳細については、computedVarsとcomputedVarsProgramパラメーターの使用 (SAS Cloud Analytic Services: CASLプログラマガイド)を参照してください。
    • 重要な制限と要件については、WHERE処理と計算列の制限事項を参照してください。
  • table.fetchアクションでは、生の数値の並べ替えにsortBy=が指定されている場合、並べ替えはデータベースで処理されます。
  • フォーマットは、次の種類のコードが処理されるときに、SAS Embedded Processによってデータベース内で実行されます。
    • PUT関数がWHERE句内にある
    • PUT関数が計算列プログラムにある
    • 集計プッシュダウン操作では、フォーマットされた値を基準にグループ化される(groupby=パラメーターを指定した要約または一意のアクション)
    • 集計プッシュダウン操作では、集計は一意のフォーマットされた値をカウントします(raw=falseの重複しないアクション)。
  • データコネクタは、CASとの間でデータを並列転送します。このデータの並列転送はストリーミングとも呼ばれ、SAS Embedded Processは使用されません。したがって、dataTransferMode=オプションは必要ありません。
  • データコネクタは、PROC SCOREACCELまたはCASアクションを使用して、In-Databaseモデルスコアリングをサポートします。例については、Publish, Run, and Delete a Model in SingleStore (SAS In-Database Products: User’s Guide)を参照してください。
  • SAS Visual Analyticsは、分析ストア(ASTORE)オブジェクトとして保存されるモデルを生成できます。そのモデルは、computedVarsProgram=パラメーターで指定されたCAS計算列から実行できます。計算列は、データベースで処理されます。この種類のモデル処理は、DS2処理を使用する、In-databaseモデルのパブリッシュとスコアリングと同じではありません。
ヒントIn-database DATAステップとPROC ACCELERATORがサポートされています。これらのSASSpeedyStore機能は、SASSpeedyStoreデータコネクタではなく、SingleStore LIBNAMEエンジンを使用します。詳細については、DATA Step Acceleration (SAS In-Database Products: User’s Guide)およびACCELERATOR Procedure (SAS In-Database Products: User’s Guide)を参照してください。

SAS Embedded Processingの詳細

一部のIn-Database処理では、SAS Embedded Processを使用します。この機能は、SASSpeedyStoreに含まれるSingleStoreインスタンスのすべてのノードで実行される高パフォーマンスの並列サービスプロセスです。SAS ExpressyStoreのライセンスを取得している場合、他のデータソースの場合と同様に、SAS Embedded Processのインストールは必要ありません。SingleStoreはSAS Viyaプラットフォームの注文とともに配送され、SAS Embedded ProcessはSingleStoreにすでにインストールされています。

CASアクションが実行され、SAS Embedded Processを使用して、データがSingleStoreに存在するテーブルが読み取られる場合、処理は次のように実行されます。

  • SAS Embedded Processは、SAS関数ではなく、SingleStore外部関数を使用して呼び出されます。
  • 外部関数は、テーブルを含むcaslibに関連付けられたSingleStoreデータベースでの読み取り操作の開始時に作成されます。
  • 外部関数は、読み込み操作の終了時に削除されます。

SingleStore caslibを割り当てる際、epDatabase=オプションを使用して、SAS Embedded Processでメタデータを保存するためのデータベースを指定できます。専用データベースをお勧めします。Creating the Metadata Database for the SAS Embedded Process (SAS SpeedyStore: Administration and Configuration Guide)を参照してください。

WHERE処理と計算列の制限事項

WHERE式または計算列を使用すると、SingleStoreに自動的に処理が渡されます。詳細については、In-Database処理を使用したパフォーマンスの向上を参照してください。

次に、一部の要件と制限を示します。

  • caslibをSingleStoreデータソースに割り当てるときは、ホストとポートの内部サービス名を指定する必要があります。外部名を指定すると、完全なin-database処理はサポートされません。
  • WHERE式または計算列にユーザー定義出力形式が含まれている場合は、次のタスクを実行する必要があります。
    1. sessionProp.saveFmtLibアクションを使用して、フォーマットライブラリをSingleStoreデータベーステーブルとして保存します。パラメーターsaveForEP=TRUEはパフォーマンスを最適化します。デフォルト値TRUEでは、フォーマットライブラリが行ストア参照テーブルとして保存され、コピーがすべてのリーフに配置されます。フォーマットライブラリは比較的小さい傾向がありますが、頻繁に使用されます。フォーマットライブラリが非常に大きい場合は、saveForEP=FALSEを設定します。
    2. S2FORMATSEARCH=セッションオプションまたはcas.S2FORMATSEARCH=サーバーオプションを設定して、出力形式を含む1つ以上のデータベーステーブル名をリストします。

    詳細な例については、ユーザー定義出力形式をSingleStoreデータベースにパブリッシュするを参照してください。アクションの詳細については、saveFmtLib (SAS Viya Platform: System Programming Guide)を参照してください。オプションの構文については、S2FORMATSEARCH= セッションオプションを参照してください。また、cas.S2FORMATSEARCH=サーバーオプションについては、構成ファイルオプションのリファレンス (SAS Viyaプラットフォーム: SAS Cloud Analytic Services)を参照してください。ユーザー定義の出力形式の作成と使用の詳細については、SAS Cloud Analytic Services: ユーザー定義出力形式を参照してください。

  • SingleStoreに渡されるWHERE式または計算列コードでは4,096列を超えて使用できません。
  • CASアクションのwhereTable=パラメーターはサポートされていません。
注: saveForEP=パラメーターのデフォルト値は、table.saveアクションとsessionProp.saveFmtLibアクションでは異なります。table.saveアクションを使用して分析ストアをSingleStoreに保存する場合、通常はデフォルト値のsaveForEP=FALSEが適切です。このパラメーターは、SingleStoreに保存されるすべてのBLOBテーブルに影響します。分析ストア(astore)は、BLOBテーブルの一種です。適度なサイズの分析ストアがある場合は、saveForEP=TRUEの設定を検討してください。saveForEP=TRUEを設定すると、BLOBテーブルのコピーがすべてのリーフに配置されます。この動作は、SAS Embedded Processによって使用される分析ストアに最適です。ただし、分析ストアが非常に大きい場合、または他の種類のBLOBテーブルを保存している場合、saveForEP=TRUEを設定すると、パフォーマンスが低下する可能性があります。

マルチパス分析のパフォーマンスの向上

マルチパス分析では、データを複数回読み取る必要があります。データコネクタはオンデマンドでデータをストリーミングするため、複数のパスがパフォーマンスに影響を与える可能性があります。multipassMemory="cache"オプションは、データの移動を減らすことで、このパフォーマンスの問題を解決できます。要求されたデータは一時的にCASディスクキャッシュにロードされ、マルチパスアクションの完了後にキャッシュから解放されます。ロードされるデータをフィルタリングすると、パフォーマンスをさらに向上させることができます。

さまざまなユースケースに応じて他の選択肢も利用できます。multipassMemory="stream"設定はメモリ使用量の節約に役立ち、マルチパス列を使用してパフォーマンスを向上させます。backingStore="CASDISKCACHE"オプションはストリーミングを完全に回避し、従来の方法でテーブル全体をCASディスクキャッシュにロードします。これらの選択肢の比較については、multipassMemory= データコネクタオプションを参照してください。

singlePass=パラメーターはマルチパスの動作には影響を与えないことに注意してください。他のデータコネクタで使用する場合は、Understanding the SinglePass Parameter (SAS Viya Platform: System Programming Guide)を参照してください。

SQLプッシュダウンを使用したパフォーマンスの向上

SQLプッシュダウンは、次のアクションでサポートされています。

  • 集計プッシュダウンは、2025.03以降のsimple.distinctアクションでサポートされています。
  • 集計プッシュダウンは、2024.11以降のsimple.summaryアクションでサポートされています。
  • SELECT DISTINCTプッシュダウンは、2024.09以降の、 simple.groupByアクションでサポートされています。

集計プッシュダウンは、CASアクションがデータベースで処理する集計要求をプッシュダウンできるようにします。集計されたデータはCASにストリーミングされます。一般に、集計のために全データをCASにストリーミングするのではなく、データベース内で集計を実行できると、パフォーマンスが向上します。データベースで集計要求を処理する方法は次のとおりです。

  • aggregatePushdown=trueデータコネクタオプションを指定するか、集計プッシュダウンをサポートするアクションでsql=trueを指定します。アクションでsql=パラメーターが指定されている場合、その設定はaggregatePushdown=データコネクタオプションよりも優先されます。sql=が設定されていない場合は、aggregatePushdown=trueを使用して集計要求をプッシュダウンします。
  • Simple.distinctアクションでgroupbyTableパラメーターを使用しないでください。このパラメーターはpushdownではサポートされていません。
  • Simple.summaryアクションでは、次のパラメーターは使用しないでください: freq=、groupByTable=、repeat=、Weight=、whereTable=。これらのパラメーターは、プッシュダウンではサポートされていません。

SELECT DISTINCT pushdownは集計要求ではありませんが、CASに返される結果セットを削減します。SELECT DISTINCTプッシュダウンを実装する方法は次のとおりです。

  • aggregatePushdown=trueデータコネクタオプションを指定します。(sql=パラメーターは、simple.groupByでは使用できません。)
  • Simple.groupByアクションで次のパラメーターを使用しないでください: aggregator=、 freq=、scoreGt=、scoreLt=、Weight=。これらのパラメーターは、プッシュダウンではサポートされていません。

集計要求がデータベースにプッシュダウンされると、次のメッセージがSASログに書き込まれます。

NOTE: The aggregation is being calculated in the database.

詳細については、aggregatePushdown= データコネクタオプションを参照してください。

ユーザー定義関数が必要であることをSASログメッセージが示している場合は、open-aggregatesユーザー定義関数(UDF)をダウンロードします。詳細については、udfDatabase= データコネクタオプションを参照してください。

SingleStoreからのデータ型の読み取り

次のテーブルはSingleStoreからCASにロードできるデータ型を示します。このテーブルには、データがCASにロードされた結果のデータ型も示されます。CASのデータ出力形式の長さはソースデータの長さに基づきます。

サポートされているSingleStoreデータ型

SingleStoreデータ型

CASデータ型

文字

CHAR(n)

CHAR(n)

LONGTEXT

VARCHAR

MEDIUMTEXT

VARCHAR

TEXT

VARCHAR

TINYTEXT

VARCHAR

VARCHAR

VARCHAR

バイナリ

BINARY

BINARY(n)

BLOB

VARBINARY

LONGBLOB

VARBINARY

MEDIUMBLOB

VARBINARY

TINYBLOB

VARBINARY

VARBINARY

VARBINARY

数値

BIGINT

INT64

BOOL

INT32

DECIMAL

DOUBLE

DOUBLE

DOUBLE

FLOAT

DOUBLE

INT

INT32

MEDIUMINT

INT32

SMALLINT

INT32

TINYINT

INT32

日時

DATE

DOUBLE

(出力形式が指定されていない場合は、DATEwとしてフォーマットされます)

DATETIME

DOUBLE

(出力形式が指定されていない場合は、DATETIMEw.dとしてフォーマットされます)

DATETIME(6)

DOUBLE

(出力形式が指定されていない場合は、DATETIMEw.dとしてフォーマットされます)

TIME

DOUBLE

(出力形式が指定されていない場合は、Timerw.dとしてフォーマットされます)

TIME(6)

DOUBLE

(出力形式が指定されていない場合は、Timerw.dとしてフォーマットされます)

TIMESTAMP

DOUBLE

(出力形式が指定されていない場合は、DATETIMEw.dとしてフォーマットされます)

TIMESTAMP(6)

DOUBLE

(出力形式が指定されていない場合は、DATETIMEw.dとしてフォーマットされます)

YEAR

INT32

その他:

BIT

INT64

ENUM

VARCHAR

GEOGRAPHY

ERROR (サポートされていません)

GEOGRAPHYPOINT

CHAR(144)

JSON

VARCHAR

SET

VARCHAR

SingleStoreへのデータ型の書き込み

次の表では、CASがSingleStoreデータ型にデータを書き込む方法を説明します。

SingleStoreデータ型へのCAS列の書き込み

CASデータ型

SingleStoreデータ型

バイナリ

BINARY(n)

BINARY(n)

VARBINARY

LONGBLOB

文字

CHAR(n) (ここでは、n < 256)

CHAR(n)

CHAR(n) (ここでは、256 <= n < 21845)

VARCHAR(n)

CHAR(n) (ここでは、n >= 21845)

LONGTEXT

VARCHAR(n) (ここでは、n < 21845)

VARCHAR(n)1

VARCHAR(n) (ここでは、n >= 21845)

LONGTEXT

VARCHAR(*)

LONGTEXT

数値

出力形式w.のDOUBLE(ここでは、w <= 6)

INT

出力形式w.のDOUBLE(ここでは、7 <= w <=17)

BIGINT

日時出力形式のDOUBLE2

DATETIME(6)3

日付出力形式のDOUBLE2

DATE

時間出力形式のDOUBLE2

TIME(6)3

その他の出力形式、または出力形式なしのDOUBLE

DOUBLE

INT32

INT

INT64

BIGINT

1 VARCHAR(n)値が更新または追加されるときに、値にn文字を超える文字が含まれる場合、値はn文字に切り捨てられます。
2 日時出力形式のリストについては、日付と時間 (SAS出力形式と入力形式: リファレンス)を参照してください。
3 2023.12より前では、出力形式の小数(d)がゼロ以外の場合にのみ、列はDATETIME(6)またはTIME(6)に変換されました。それ以外の場合、列はDATEまたはTIMEに変換されます。

次に例を示します。テーブルは、事前に割り当てられたcaslibを使用してSingleStoreに作成されます。このコードでは、データをtime_col列とtime_col_dec列に適切に読み込むために、INPUTステートメントで入力形式が指定されています。対応する出力形式は、FORMATステートメントを使用して永続的に割り当てられます。日付または時間のデータ型をSingleStoreに書き込むには出力形式が必要です。time_col列はTIMEデータ型として書き込まれます。time_col_dec列は、出力形式time11.2の.2小数値のため、TIME(6)データ型として書き込まれます。

libname mylib cas caslib="mycaslib";
data mylib.timedata;
   input item $ time_col time8. +1 time_col_dec time11.2;
   format time_col time8. time_col_dec time11.2;
   datalines;
apple 01:01:01 01:01:01.01
orange 11:59:59 11:59:59.44
;
run;

VARCHARデータとCASサーバー

CASサーバーでは、VARCHARデータのロード、保存、および書き込みがサポートされています。CASサーバーを使用して完了できるタスクはすべてVARCHARデータを使用します。CASサーバーで完了しないタスクでは、VARCHARデータを固定長のCHARデータに変換してからデータを印刷または保存します。

詳細については、暗黙的および明示的なデータ型の変換のVARCHARサポートを参照してください。

整数データ型と数値精度

CASサーバーでは、整数データ型(INT32およびINT64)のロード、保存、および書き込みがサポートされています。CASサーバーを使用して完了できる一部の計算では、元のデータ型が維持されます。CASアクションが整数の種類をサポートしているかどうかを判断するには、ドキュメントを参照してください。CASサーバーで完了しないタスクでは、これらのデータ種類をSAS DOUBLEに変換してからデータを印刷または保存します。SAS DOUBLE値では、約15桁の精度が維持されます。

計算サーバー上で実行されているDATAステップに10進数15桁を超える精度の値を読み込むと、データはDOUBLE値に変換されます。したがって、DATAステップがCASサーバー上で実行されているかどうかを確認することをお勧めします。ログをチェックして、DATAステップが実行されている場所を確認します。詳細については、DATAステップ処理モード (SAS Cloud Analytic Services: DATAステッププログラミング)を参照してください。

CASでサポートされていないプロシジャに15桁を超える精度の10進数を含む値を読み取ると、値は丸められ、15桁の精度のDOUBLE値に変換されます。ほとんどのプロシジャはCASサーバーでサポートされています。ただし、大きな数値に使用する前に、プロシジャがサポートされているか確認することをお勧めします。詳細については、Base SASプロシジャガイドを参照してください。

例

例1: SAS Cloud Analytic ServicesのデータソースとしてSingleStoreデータベースを追加する

CASLIBステートメントを使用して、SingleStoreのソースデータとcaslib singlestorelib間の接続を確立します。

caslib singlestorelib
   datasource=(
     srctype="singlestore"
     database="my_database"
     epDatabase="metadata_database"
     host="svc-sas-singlestore-cluster-dml"
     pass="my_password"
     port="3306"
     user="my_username"
   )
;

例2: ユーザー定義出力形式をSingleStoreデータベースにパブリッシュする

この例を実行する前に、SAS Cloud Analytic ServicesのデータソースとしてSingleStoreデータベースを追加するで作成したCASLIBステートメントをサブミットします。

次のコードブロックでは、agefmtという名前の出力形式を含むmyfmtlibという名前のフォーマットライブラリを作成します。次に、このコードで、Sashelpテーブルからサンプルテーブルを作成し、そのテーブルをSingleStoreに保存します。


proc format casfmtlib="myfmtlib" sessref=casauto;
   value agefmt
      low-12 = "group 1"
      13-14 = "group 2"
      15-high = "group 3";
run;

proc casutil;
   load data=sashelp.class 
   casout="myclass" replace;
run;
proc casutil;
   save casdata='myclass' 
   casout="myclass_save" 
   outcaslib="singlestorelib" replace;
run;

次のコードブロックでは、フォーマットライブラリをSingleStoreデータベースに保存します。これは、後のステップでこの出力形式をWHERE式で使用するためです。WHERE式はデータベースで処理されるため、フォーマットライブラリが使用可能である必要があります。フォーマットライブラリは、singlestorelib caslibで指定されたデータベースにmyfmtlib_saveという名前のテーブルとして保存されます。in-database処理では、フォーマットライブラリを検索して出力形式を見つけられる必要があります。このコードでは、S2FORMATSEARCH=セッションオプションを使用して、フォーマットライブラリを含むテーブルを指定します。セッション間で出力形式を共有する必要がある場合は、セッションオプションのかわりにcas.S2FORMATSEARCH=サーバーオプションを指定します。


proc cas;
   savefmtlib / fmtlibname="myfmtlib"
                name="myfmtlib_save"
                caslib="singlestorelib";
run;
quit;

options cassessopts=(s2formatsearch="singlestorelib.myfmtlib_save");

/* Uncomment this code to make the format library available globally */
/* proc cas;                                                         */
/*    assumerole / adminrole='superuser';                            */
/*    configuration.setservopt / s2formatsearch='s2.s2formatname';   */
/* run;                                                              */
/* quit;                                                             */

次のコードブロックでは、where=パラメーターの条件を満たす行をフェッチします。次に、このコードでは、PRINTプロシジャでWHERE句を使用します。どちらのWHERE式を使用しても、データベースで行選択が行われます。in-database処理では、ユーザー定義出力形式agefmtをデータベースに保存し、S2FORMATSEARCH=オプションで使用できるようにする必要があります。


proc casutil;
   load casdata="myclass_save" 
   incaslib="singlestorelib" 
   casout="myclass_load" 
   outcaslib="singlestorelib";
run;

proc cas;
   fetch / 
      table={caslib="singlestorelib"
             name="myclass_load" 
             where='put(age, agefmt.) = "group 2"'
             }
           sortby={"Name"}
   ;
run;
quit;

libname mycas cas sessref=casauto caslib="singlestorelib";
proc print data=mycas.myclass_load;
   format age agefmt.;
   where age > 14;
run;

PROC PRINT出力

PROC PRINT出力

データベースからmyclass_saveとmyfmtlib_saveを削除する必要がある場合は、次のコードを使用します。


proc cas;
   deletesource
      source="myclass_save" caslib="singlestorelib" ;
   deletesource
      source="myfmtlib_save" caslib="singlestorelib" ;
run;
quit;

アクションの詳細については、saveFmtLib (SAS Viya Platform: System Programming Guide)を参照してください。オプションの構文については、S2FORMATSEARCH= セッションオプションを参照してください。また、cas.S2FORMATSEARCH=サーバーオプションについては、構成ファイルオプションのリファレンス (SAS Viyaプラットフォーム: SAS Cloud Analytic Services)を参照してください。ユーザー定義の出力形式の作成と使用の詳細については、SAS Cloud Analytic Services: ユーザー定義出力形式を参照してください。

例3: SingleStoreパイプラインからのデータへのアクセス

この例は、データコネクタがSingleStore Pipelines機能をサポートしていることを示しています。パイプラインの詳細については、SingleStoreドキュメントWebサイトを参照してください。

ユーザーは、SASの外部で次のSQLコードをサブミットします。たとえば、コードはSingleStoreDB Studioでサブミットできます。このコードは、SingleStoreデータベースにstudent_gradesという名前の新しいテーブルを作成します。次に、コードは、Azure Blob Storageからstudent_gradesにデータを読み込むためのSingleStoreパイプラインを定義します。パイプラインが開始されると、パイプラインはすべてのデータを保存場所からstudent_gradesテーブルにロードします。

/* Set the working database. */
use test ;

/* Create the student_grades table. */
create table if not exists student_grades (
      student varchar (20),
      class varchar (20),
      grade double,
      semester double,
      shard key () )
   autostats_cardinality_mode=incremental autostats_histogram_mode=create 
   autostats_sampling=on sql_mode='strict_all_tables' ;

/* Define the pipeline. */
create aggregator pipeline if not exists classgrades_pl
as load data azure 'my_demo/data/class'
/* Replace the ADLS account name and key. */
credentials '{"account_name": "my_account_name", "account_key": "my_account_key"}'
into table student_grades 
fields terminated by ','
(student,class,grade,semester);

/* Start the pipeline. */
start pipeline if not running classgrades_pl ;

/* Stop the pipeline later, after the demo is finished. */
/* stop pipeline if running classgrades_pl; /*

次のファイルは、classgrades_plパイプラインに関連付けられたAzure Blob Storageの場所で使用できます。CSVファイルには、2人の生徒の1学期の成績が含まれています。

1学期の成績の生データ

1学期の生データのスクリーンショット

SAS Viyaプラットフォームでは、ユーザーはCASサーバーを起動し、caslibを割り当て、FEDSQLプロシジャクエリをサブミットします。

cas mysession;

caslib s2 desc="My SingleStore Caslib"
   dataSource=(srctype='singlestore',
   database="my_database",
   epdatabase="my_ep_database",
   host="my_host",
   pass="my_password",
   port=my_port,
   user="my_user_ID");

proc casutil incaslib="s2" outcaslib="s2" ;
   load casdata="student_grades" casout="student_grades" promote;
quit;

proc fedsql sessref=mysession ;
   select student, round(avg(grade),.01) as gpa from s2.student_grades group by student ;
quit ;

student_gradesテーブルのPROC FEDSQLクエリは、次の出力を生成します。

1学期の学業平均値のPROC FEDSQL出力

PROC FEDSQLからの出力

2学期の終わりに、ユーザーはAzure Blob Storageの場所に別のファイルを追加します。CSVファイルには、2人の生徒の2学期の成績が含まれています。ユーザーのSingleStoreパイプラインが実行中の場合、新しいデータがstudent_gradesテーブルに自動的に追加されます。

2学期の成績の生データ

2学期の生データのスクリーンショット

ユーザーは、1学期と同じPROC FEDSQLコードを実行します。データが追加されたため、出力が変更されました。次の出力に示されているように、どちらの生徒も2学期の成績が低かったため、学業平均値も低くなりました。

1学期と2学期の学業平均値のPROC FEDSQL出力

2学期データが追加された後のPROC FEDSQLからの出力
最終更新: 2026年9月4日