Main Content

parquetwrite

Parquet ファイルに列指向データを書き込む

説明

parquetwrite(filename,T) は table または timetable Tfilename で指定されたファイル名をもつ Parquet 2.0 ファイルに書き込みます。

parquetwrite(filename,T,Name,Value) は、1 つ以上の名前と値のペアの引数を使用して追加オプションを指定します。たとえば、"VariableCompression" を指定して使用される圧縮アルゴリズムを変更したり、"Version" を指定してデータを Parquet 1.0 ファイルに書き込んだりできます。

すべて折りたたむ

表形式データを Parquet ファイルに書き込み、同じ表形式データのサイズを .csv ファイル形式と .parquet ファイル形式で比較します。

ファイル outages.csv から table に表形式データを読み取ります。

T = readtable('outages.csv');

Parquet ファイル形式にデータを書き込みます。既定で、関数 parquetwriteSnappy 圧縮方式を使用します。その他の圧縮方式を指定する場合は、 'VariableCompression' の名前と値のペアを参照してください。

parquetwrite('outagesDefault.parquet',T)

ファイル サイズを取得して .csv 形式での表形式データのサイズと .parquet 形式での同じデータのサイズの比率を計算します。

.csv ファイルのサイズを取得します。

fcsv = dir(which('outages.csv'));
size_csv = fcsv.bytes
size_csv = 101040

.parquet ファイルのサイズを取得します。

fparquet  = dir('outagesDefault.parquet');
size_parquet = fparquet.bytes
size_parquet = 44881

比率を計算します。

sizeRatio = ( size_parquet/size_csv )*100 ;
disp(['Size Ratio = ', num2str(sizeRatio) '% of original size'])
Size Ratio = 44.419% of original size

入れ子にされたデータを作成して Parquet ファイルに書き込みます。

入れ子層が 1 つであるデータが含まれた table を作成します。

FirstName = ["Akane"; "Omar"; "Maria"];
LastName = ["Saito"; "Ali"; "Silva"];
Names = table(FirstName,LastName);
NumCourse = [5; 3; 6];
Courses = {["Calculus I"; "U.S. History"; "English Literature"; "Studio Art"; "Organic Chemistry II"];
            ["U.S. History"; "Art History"; "Philosphy"];
            ["Calculus II"; "Philosphy II"; "Ballet"; "Music Theory"; "Organic Chemistry I"; "English Literature"]};
data = table(Names,NumCourse,Courses)
data=3×3 table
            Names            NumCourse      Courses   
    _____________________    _________    ____________

    FirstName    LastName                             
    _________    ________                             
                                                      
     "Akane"     "Saito"         5        {5x1 string}
     "Omar"      "Ali"           3        {3x1 string}
     "Maria"     "Silva"         6        {6x1 string}

入れ子にされたデータを Parquet ファイルに書き込みます。

parquetwrite("StudentCourseLoads.parq",data)

入れ子にされた Parquet データを読み取ります。

t2 = parquetread("StudentCourseLoads.parq")
t2=3×3 table
            Names            NumCourse      Courses   
    _____________________    _________    ____________

    FirstName    LastName                             
    _________    ________                             
                                                      
     "Akane"     "Saito"         5        {5x1 string}
     "Omar"      "Ali"           3        {3x1 string}
     "Maria"     "Silva"         6        {6x1 string}

入力引数

すべて折りたたむ

出力 Parquet ファイルの名前。文字ベクトルまたは string スカラーとして指定します。

書き込み先の場所によって、filename は次のいずれかの形式にできます。

場所

形式

現在のフォルダー

現在のフォルダーに書き込むには、ファイルの名前を filename に指定します。

例: 'myData.parquet'

その他のフォルダー

現在のフォルダーとは異なるフォルダーに書き込むには、絶対パス名または相対パス名を filename に指定します。

例: 'C:\myFolder\myData.parquet'

例: 'dataDir\myData.parquet'

リモートの場所

リモートの場所に書き込むには、filename に次の形式の Uniform Resource Locator (URL) として指定されたファイルの絶対パスを含めなければなりません。

scheme_name://path_to_file/myData.parquet

リモートの場所に基づいて、scheme_name には次の表の値のいずれかを指定できます。

リモートの場所scheme_name
Amazon S3™s3
Windows Azure® Blob Storagewasb, wasbs
HDFS™hdfs

詳細については、リモート データの操作を参照してください。

例: 's3://bucketname/path_to_file/myData.parquet'

データ型: char | string

入力データ。table または timetable として指定します。

Parquet の構造化データをエクスポートするには、parquetwrite を使用します。書き込みでサポートされる Parquet データ型の詳細については、Apache Parquet データ型のマッピングを参照してください。

名前と値の引数

引数のオプションのペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後になければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name を引用符で囲みます。

例: parquetwrite(filename,T,'VariableCompression','gzip','Version','1.0')

圧縮方式名。次の値のいずれかとして指定します。

  • 'snappy''brotli''gzip'、または 'uncompressed'。1 つの圧縮アルゴリズムを指定すると、parquetwrite は同じアルゴリズムを使用してすべての変数を圧縮します。

  • または、各変数に使用する圧縮アルゴリズムの名前が含まれる文字ベクトルの cell 配列または string ベクトルを指定できます。

一般に、'snappy' の読み取りと書き込みのパフォーマンスは高く、'gzip' は CPU 処理時間が長くなりますが圧縮率が高く、'brotli' は通常、圧縮速度が低下しますが最小ファイル サイズを作成します。

例: parquetwrite('myData.parquet', T, 'VariableCompression', 'brotli')

例: parquetwrite('myData.parquet', T, 'VariableCompression', {'brotli' 'snappy' 'gzip'})

エンコード スキーム名。次の値のいずれかとして指定します。

  • 'auto'parquetwrite は logical 変数に対しては 'plain' エンコードを使用し、その他すべてに対しては 'dictionary' エンコードを使用します。

  • 'dictionary''plain' — あるエンコード スキームを指定した場合、parquetwrite はそのスキームを使用してすべての変数をエンコードします。

  • または、各変数に使用するエンコード スキームの名前が含まれる文字ベクトルの cell 配列または string ベクトルを指定できます。

一般に、'dictionary' エンコードによってファイル サイズが小さくなりますが、繰り返しの値が多く含まれていない変数については 'plain' エンコードの方がより高速になりえます。ディクショナリのサイズまたは一意の値の数が過度に大きくなると、エンコードは自動的に plain エンコードに戻ります。Parquet エンコードの詳細については、Parquet encoding definitions を参照してください。

例: parquetwrite('myData.parquet', T, 'VariableEncoding', 'plain')

例: parquetwrite('myData.parquet', T, 'VariableEncoding', {'plain' 'dictionary' 'plain'})

出力行グループごとに書き込む行の数。非負の数値スカラーまたは非負の整数のベクトルとして指定します。

  • スカラーを指定した場合、そのスカラー値により、出力 Parquet ファイル内のすべての行グループの高さが設定されます。正確な倍数でない場合、最後の行グループに含まれる行数が少なくなることがあります。

  • ベクトルを指定した場合、そのベクトル内の各値により、出力 Parquet ファイル内の対応する行グループの高さが設定されます。ベクトル内のすべての値の合計は、入力 table の高さに一致している必要があります。

行グループは、メモリに一度に読み取ることができる Parquet ファイルの最小サブセットです。行グループの高さを減らすと、読み取り時にデータがメモリに適合しやすくなります。行グループの高さは、Parquet データ セットに対するフィルター処理のパフォーマンスにも影響します。行グループの高さが大きいほど、読み取り時にフィルター処理できるデータ量が多くなるためです。

RowGroupHeights が指定されておらず、入力 table が 67,108,864 行を超えている場合、出力ファイル内の行グループの数は floor(TotalNumberOfRows/67108864)+1 になります。

例: RowGroupHeights=100

例: RowGroupHeights=[300, 400, 500, 0, 268]

使用する Parquet バージョン。'1.0' または '2.0' のいずれかとして指定します。既定では、'2.0' が最も効率的なストレージを提供しますが、Parquet 形式をサポートする外部アプリケーションとの最も幅広い互換性を実現するために '1.0' を選択することもできます。

注意

Parquet version 1.0 には、uint32 型の変数をラウンドトリップできないという制限があります (こうした変数は int64 として MATLAB® に読み戻されます)。

制限

場合によっては、parquetwrite は元の配列 T を正確には表さないファイルを作成します。parquetread または datastore を使用してファイルを読み取る場合、結果の形式または内容は元の table と異なる可能性があります。詳細については、Apache Parquet データ型のマッピングを参照してください。

拡張機能

バージョン履歴

R2019a で導入

すべて展開する