Umami CloudからセルフホストUmamiへCSVをインポートする方法
はじめに
Umamiは、ユーザーフレンドリーなインターフェースと強力なウェブサイト分析機能を提供し、多くの開発者やウェブサイト所有者に人気のある選択肢となっています。しかし、長期的なデータ保持とより広範なドメイン分析に関しては、Umami Cloudの無料版では十分ではない場合があります。このチュートリアルでは、Umami Cloudからセルフホスト版Umamiへデータを移行する方法を説明します。
Youtubeビデオチュートリアル
Githubリポジトリ
Huggingface Space
なぜ移行するのか?
Umami Cloudの無料版は、便利なホスティングを提供していますが、2つの明確な制限があります:
- データ保持期間の制限:データは1年間のみ保持され、その後自動的に削除されます。
- ドメイン名使用の制限:最大3つのドメイン名までしか分析できません。
セルフホスト版への移行は、長期的なデータ保持と複数のプロジェクト分析を望むユーザーにとって理想的な選択肢です。
ステップ1. データのエクスポート
Umami Cloudからのデータエクスポート
データを転送するには、まずUmami CloudからCSVデータをエクスポートする必要があります。
- Umami Cloudアカウントにログインします。
- データ管理ページに移動し、エクスポートが必要なウェブサイトデータを選択します。
- Umamiは選択したデータをパッケージ化し、準備が整うとダウンロードリンクをメールで送信します。
ステップ2. データ処理
CSVファイルをダウンロードしたら、Pythonスクリプトを使用してデータベースにインポートできるように処理する必要があります。このスクリプトは、データの準備を支援し、セルフホスト版のデータベースにインポートできるようにします。このスクリプトはGitHubからダウンロードするか、Huggingface Spaceを使用できます。
Umamiのデータベースには、website_eventとsessionという2つの主要なデータタイプが含まれています。データをインポートする際には、新しいサイトインスタンスを作成し、古いサイトIDを新しいサイトIDに置き換える必要があります。
1 | pip install pandas |
1 | import pandas as pd |
その前に、セルフホスト版UmamiのウェブサイトIDを、Umami Cloud上の古いウェブサイトIDと置き換える必要があります。ウェブサイトIDは、ウェブサイトの設定画面で確認できます。
データを処理すると、website_event.csv
とsession.csv
の2つのファイルが生成されます。
ステップ3. データのインポート
データは、SQLコマンドラインまたはPG adminなどのデータベース管理ツールを使用してインポートできます。インポートプロセスの詳細については、以下のチュートリアルリンクを参照してください。
以下のいずれかの方法を試すことができます:
MySQLテーブルへのCSVファイルのインポート
https://www.mysqltutorial.org/mysql-basics/import-csv-file-mysql-table/
PostgreSQLテーブルへのCSVファイルのインポート
https://www.postgresqltutorial.com/postgresql-tutorial/import-csv-file-into-posgresql-table/
まずwebsite_eventをインポートし、次にsessionをインポートできます。PGadminに切り替えてwebsite_event
フォームを選択し、データのインポートを実行します。ファイルのインポートが完了したらUmamiインターフェースを更新するだけで、新しいデータが表示されるはずです。次に、session
データのインポートを行います。session_id
に関する問題が発生する可能性があります。この問題を解決するために、SQLコマンドを使用して関連する一意のインデックスを直接削除できます。より良い対処方法がある場合や困難に遭遇した場合は、記事の下のコメントセクションにメッセージを残してください。
-
プライマリキー制約の削除: これにより、テーブルで重複する
session_id
値が許可されます。以下のコマンドを実行します:1
ALTER TABLE session DROP CONSTRAINT session_pkey;
-
ユニークインデックスの削除: 以下のコマンドを実行して、
session_id
の一意性制約を削除します:1
DROP INDEX session_session_id_key;
これらの制約を削除すると、テーブルは重複するsession_id
値を受け入れることができるようになります。ただし、プライマリキーと一意のインデックスは通常、データの整合性を確保しパフォーマンスを最適化するために使用されるため、それらを削除すると他の問題が発生する可能性があることに注意してください。
基本的なコマンド
-
PostgreSQLのすべてのテーブルを表示
1
\dt
より詳細な情報(テーブルサイズなど)を見たい場合は、以下を使用できます:
1
\dt+
-
データベーステーブルの行数を確認
1
SELECT COUNT(*) FROM session;
-
特定の行を削除
特定の条件を満たす行のみを削除する場合(例:website_idのセッションデータを削除)
1
DELETE FROM session WHERE website_id = '425f-95';
結論
最後に、ページを再度更新すると、すべてのデータが正しく表示されているはずです。この時点でデータ移行は完了し、新しいトラッキングコードの使用を開始できます。
GitHubで多くのユーザーが、Umamiにインターフェースから直接データをインポートする機能を追加するよう要請していることは注目に値します。開発チームがこの機能を検討しており、近い将来に実装されることを期待しています。
https://github.com/umami-software/umami/issues/2653#issuecomment-2040970801
https://github.com/umami-software/umami/issues/2456
ご覧いただきありがとうございます。このチュートリアルがお役に立てば幸いです。質問や提案がありましたら、コメントして議論してください。