TROCCOがNotionからのデータ転送に対応しました
Notionとは?
Notionは、メモ、ドキュメント、タスク管理、データベースなど、様々な機能を一つにまとめた多機能ワークスペースです。個人利用からチームでの共同作業まで、幅広い用途に対応できる柔軟性の高さが特徴です。
TROCCOとは?
TROCCOは、データの連携・変換をスムーズに実現するクラウド型データ統合ツールです。
執筆者はTROCCOのカスタマーサクセスエンジニアをしています。
今回転送するデータ
Notion上で以下のようなデータベース(KANBAN)を用意しました。
これはデフォルトのテンプレートを元にしております。
KANBAN形式で表示されておりますが、実態は以下のようなデータベースとなっております。
このデータベースを、TROCCO経由だとどのように取得できるのか、試してみます!
TROCCOで転送してみた
接続情報の作成
【Notion】インテグレーションの作成
こちら⏬️のページより、インテグレーションを作成します。
今回は、「内部インテグレーション」を作成しました。
「インテグレーションシークレット」をコピーしておきます。
【TROCCO】接続情報の作成
こちら⏬️から接続情報を作成します。
先ほどコピーしておいた「インテグレーションシークレット」をペーストするだけです。
【TROCCO】転送設定の作成
TROCCO側の設定は⏬️の通り。先ほど作成した接続情報を選択肢、「データベース一覧」を選択します。
「データベースID」の取得方法は以下の記事を参考にしました。
転送先ですが、今回はSnowflakeを利用しました。
プレビューを確認
設定完了、いざプレビューを確認!!と思ったら・・・404エラーが発生してしまいました。
【Notion】インテグレーションとのコネクト
インテグレーション経由でNotionのデータを取得するためには、ページ右上の…から、先程作成したインテグレーションとコネクトする必要がありました。
プレビューを再確認
無事プレビューが表示されました。
このままSnowflakeへ転送してみます。
転送完了!
Snowflake上にテーブルが作成されました
データの加工
主なデータはPROPERTIESにJSONで格納されています。
{
"ステータス": {
"id": "EAqu",
"status": {
"color": "blue",
"id": "xfqo",
"name": "開発中"
},
"type": "status"
},
"プロダクトエリア": {
"id": "sc%7Bm",
"multi_select": [],
"type": "multi_select"
},
"リクエスト名": {
"id": "title",
"title": [
{
"annotations": {
"bold": false,
"code": false,
"color": "default",
"italic": false,
"strikethrough": false,
"underline": false
},
"href": null,
"plain_text": "AI生成機能の導入",
"text": {
"content": "AI生成機能の導入",
"link": null
},
"type": "text"
}
],
"type": "title"
},
"リクエスト日": {
"created_time": "2025-03-31T10:52:00.000Z",
"id": "ZsV%5C",
"type": "created_time"
},
"依頼者": {
"id": "%3DeOH",
"people": [
{
"avatar_url": "https://*******",
"id": "*****",
"name": "*****",
"object": "user",
"person": {
"email": "********"
},
"type": "person"
}
],
"type": "people"
},
"優先度": {
"id": "PkHb",
"select": null,
"type": "select"
},
"担当者": {
"id": "%5CiBz",
"people": [],
"type": "people"
}
}
転送したデータをNotion上の表示に近づけたいので、SQLを使っていい感じに加工していきます。
Snowflakeの場合、PARSE_JSONを使用し次のように値を取り出すことができます。
SELECT
PARSE_JSON(PROPERTIES):"リクエスト名".title[0].plain_text::STRING AS "リクエスト名",
PARSE_JSON(PROPERTIES):"リクエスト日".created_time::TIMESTAMP_NTZ AS "リクエスト日",
PARSE_JSON(PROPERTIES):"依頼者".people[0].name::STRING AS "依頼者",
PARSE_JSON(PROPERTIES):"ステータス".status.name::STRING AS "ステータス",
PARSE_JSON(PROPERTIES):"プロダクトエリア".multi_select[0].name::STRING AS "プロダクトエリア",
PARSE_JSON(PROPERTIES):"優先度".select.name::STRING AS "優先度",
PARSE_JSON(PROPERTIES):"担当者".people[0].name::STRING AS "担当者"
FROM
CS_TEAM.TEST.NOTION_DB_TEST;
Notion上の項目のデータ型に応じて、中身の取り方を工夫する必要があります。
WITH句を利用したほうが多少スッキリはします。
WITH P_JSON AS(
select PARSE_JSON(PROPERTIES) AS P FROM CS_TEAM.TEST.NOTION_DB_TEST
)
select
P:"リクエスト名".title[0].plain_text::STRING AS "リクエスト名",
P:"リクエスト日".created_time::TIMESTAMP_NTZ AS "リクエスト日",
P:"依頼者".people[0].name::STRING AS "依頼者",
P:"ステータス".status.name::STRING AS "ステータス",
P:"プロダクトエリア".multi_select[0].name::STRING AS "プロダクトエリア",
P:"優先度".select.name::STRING AS "優先度",
P:"担当者".people[0].name::STRING AS "担当者"
FROM P_JSON;
※自分で考えるのがちょっとめんどくさかったので、JSONをAIくんに投げていい感じに土台となるSQLを作ってもらいました。
※BigQueryなどでも、記法は違えど同じ様なことはできるかと思います
この形式にできれば、他のシステムと連携した集計・分析もやりやすいですね💡
おわり
いかがでしたでしょうか。
TROCCOの設定は非常に簡単、その後のJSONのパースもSQLであればサクッと可能です。
Notionのデータベース×他のデータベースとの組み合わせ、活用の可能性は無限大だなと思いました
この記事を見てくださった方の、なにか少しでもお役に立てていたらならば幸いです🙏