Loading data into your PGD Cluster
==================================

PGDは、その中核がPostgresデータベースであるため、PostgreSQLデータベースを使用するのと同じツールと方法を使用して、PGDクラスターにデータをロードできます。まず、このガイドでは、PGDクラスターにデータをロードするプロセスを説明します。

オンラインCSVインポート
-----------------------

最初に、オンラインCSVファイルからPGDクラスターにデータをインポートする方法を示します。この場合、それは
`Baseball Databank <https://github.com/cbwinslow/baseballdatabank>`_  からの履歴野球データです。 psqlの\ ``\COPY``
コマンドを使用して、URLから直接インポートします。 ``\COPY``
がしないことの1つはテーブルを作成することです。したがって、最初にテーブルを作成する必要があります。

``psql``
を使用してPGDクラスターに接続します。\ ``docker compose exec host-1 psql``
を使用するか、 ``psql``
がローカルにインストールされている場合は、それを使用してホストマシンのポート6432に接続します。

.. code:: sql

   CREATE TABLE batters (
                         id SERIAL,
                         playerid VARCHAR(9),
                         yearid INTEGER,
                         stint INTEGER,
                         teamid VARCHAR(3),
                         lgid VARCHAR(2),
                         g INTEGER,
                         ab INTEGER,
                         r INTEGER,
                         h INTEGER,
                         "2b" INTEGER,
                         "3b" INTEGER,
                         hr INTEGER,
                         rbi INTEGER,
                         sb INTEGER,
                         cs INTEGER,
                         bb INTEGER,
                         so INTEGER,
                         ibb INTEGER,
                         hbp INTEGER,
                         sh INTEGER,
                         sf INTEGER,
                         gidp INTEGER,
                         PRIMARY KEY (id)
   );

これで、 ``\COPY`` コマンドを使用してCSVデータを\ ``batters``
テーブルにインポートできます。

.. code:: sql

   \COPY batters(playerid,yearid,stint,teamid,lgid,g,ab,r,h,"2b","3b",hr,rbi,sb,cs,bb,so,ibb,hbp,sh,sf,gidp) FROM PROGRAM curl "https://raw.githubusercontent.com/cbwinslow/baseballdatabank/master/core/Batting.csv" DELIMITER , CSV HEADER

このコマンドは、 ``curl`` を使用してURLからCSVファイルを取得し、
``\COPY`` コマンドに直接パイプします。このコマンドは、 ``batters``
テーブルにデータをインポートします。
rotations(…)エントリーは、CSVデータを行のどのフィールドに移動するかを定義します。
``DELIMITER ',' CSV HEADER``
オプションは、ファイルがスキップされるヘッダー行を含むCSVであることを指定します。

コマンドをコピーして、\ ``psql``
セッションに貼り付けます。すべてが正しく設定されている場合、データがエラーなしでインポートされるのが表示されるはずです。次のような、コピーされた行数を示す出力が表示されます。

.. code:: console

   COPY 110495

データが正しくロードされたことを確認するために、単純なクエリーを実行できます。

.. code:: sql

   SELECT COUNT(*) FROM batters;

次のような結果が表示されるはずです。

.. code:: console

    count
   - ------
    110495
   (1 row)

これは、110,495行が\ ``batters``
テーブルに正常にインポートされたことを確認します。

すぐにそれを使用して、1998年のホームランリーダーが誰であったかを考えてみましょう

.. code:: sql

   SELECT playerid, yearid, teamid, hr
   FROM batters
   WHERE yearid = 1998
   ORDER BY hr DESC
   LIMIT 1;

次のような出力が表示されるはずです。

.. code:: console

    playerid  | yearid | teamid | hr
   - ----------+--------+--------+----
    mcgwima01 |   1998 | SLN    | 70
   (1 row)

そして、それを1998年の最高ランクのホームラン打者トップ5のコンテキストに置きたい場合は、次のことができます。

.. code:: sql

   SELECT playerid, yearid, teamid,
          rank() OVER (PARTITION BY yearid ORDER BY hr desc) hr_rank,
          hr
   FROM batters
   WHERE yearid = 1998
   ORDER BY hr_rank LIMIT 5;

次のような出力が表示されるはずです。

.. code:: console

    playerid  | yearid | teamid | hr_rank | hr
   - ----------+--------+--------+---------+----
    mcgwima01 |   1998 | SLN    |       1 | 70
    sosasa01  |   1998 | CHN    |       2 | 66
    griffke02 |   1998 | SEA    |       3 | 56
    vaughgr01 |   1998 | SDN    |       4 | 50
    belleal01 |   1998 | CHA    |       5 | 49
   (5 rows)

PGDを使用すると、ウィンドウファンクションのような高度なSQL機能を含むPostgreSQLのフルパワーを活用してデータを分析できますが、ノードがオフラインになった場合でもマルチプルのノードにわたって完全にレプリケートされ、可用性が高いという追加の利点があります。

次のステップ
------------

いくつかのデータをPGDクラスターにロードしたので、次のトピックを探索できます。

- :ref:`Using PGD CLI <Using PGD CLI>`  コマンドラインからPGDクラスターを管理します。
