コンテンツにスキップ
Queria Docs
日本語
Esc
↑↓navigate↵open⌘Jpreview
このページの内容

データを公開する

自分のデータを Queria のカタログに載せる手順と、宣言ファイルの書き方

自分のデータを Queria のカタログに載せる手順です。必要なのは 2 つ、データそのものと、それが何なのかを説明する宣言ファイルです。

何を用意すればよいか

Queria が配信するのは DuckLake 形式のカタログです。データを DuckLake のテーブルとして書き出すところまでがビルドの仕事で、ファイルを置くだけでは公開できません。

書き出す道具は選びません。DuckLake に書ければ何でも構いません。元データの形式も、DuckDB が読めるものであれば問いません(CSV・Parquet・JSON・Excel、API から取得したものなど)。

全体の流れ

uvx queria login                  # 認証
uvx queria create my-dataset      # データセットを登録(既定は非公開)
# dataset.yml と *.table.yml を書く
uvx queria init                   # 初回のみ。ビルド先のカタログを作る
uvx queria sync -- <ビルドコマンド>  # 取得 → ビルド → 公開

uvx queria login で初めてログインするときは、ブラウザでハンドルを決めます。データセットはそのハンドルのものになり、queria.io/datasets/<ハンドル>/<データセット名> で公開されます。

データセットの作成(queria create)と公開(queria push と、それを含む queria sync)には、「データセットの変更を許可する」を有効にしたトークンが要ります。queria login の承認画面では既定で有効なので、個人のマシンからなら追加の設定は要りません。CI で公開する場合は、API トークン画面で有効にしたトークンを発行し、環境変数 QUERIA_TOKEN で渡してください。詳しくは認証を参照してください。

組織アカウントに所属している場合は、--owner で作成先を指定できます。省略すると自分のハンドルのものになります。組織として継続的に更新する場合は、管理者が queria.io/accounts/<組織のハンドル>/settings/tokens で発行する組織のサービストークンを使います。発行した人が組織を抜けても止まりません。

uvx queria create my-dataset --owner my-org

同じ名前のデータセットが複数のアカウントにあるときは、どちらを指すか決まらないため queria edit や queria delete が中断します。その場合は <ハンドル>/<データセット名> の形で指定してください。

queria sync は「公開済みのカタログを取得 → あなたのビルドを実行 → 結果を公開」を 1 コマンドで行います。-- の後ろは何でも構いません。

uvx queria sync -- python main.py
uvx queria sync -- dbt build

公開前に宣言とデータが食い違っていないか確かめられます。

uvx queria validate           # 宣言を実データと突き合わせる
uvx queria validate --strict  # 警告も失敗として扱う(CI 向け)

宣言ファイル

2 種類あります。置き場所のディレクトリ名は自由で、何についての宣言かは中身(schema と name)が決めます。

ファイル 内容
dataset.yml(リポジトリ直下、必須) データセット自体
**/*.table.yml(どこでも可) テーブル 1 つ、または複数
# dataset.yml
spec_version: "0.1"
name: calendar
title: 日本の暦データ
description: 1955年〜2027年の日付スパインに祝日・曜日・和暦・会計年度を付与したもの
language: ja
licenses: [CC-BY-4.0]
contributors:
  - title: 内閣府
    roles: [rightsHolder]
# models/main/mart_calendar.table.yml
schema: main
name: mart_calendar
title: 日本の暦
description: 祝日・曜日・和暦・会計年度を付与した日付スパイン
published: true
fields:
  - name: date
    title: 日付

列の型は書きません。 型・列順・NULL 許容は実データから読み取られるので、データとずれることがありません。

同じ列構成のテーブルが並ぶ場合は、1 ファイルに複数書いて YAML アンカーで共通部分をくくれます。

_fields: &fields
  - { name: area, title: 地域コード }
  - { name: value, title: 統計値, semantic: { role: measure, agg: sum } }
tables:
  - { schema: ssds, name: a_population, title: 人口・世帯, fields: *fields }
  - { schema: ssds, name: b_land,       title: 自然環境, fields: *fields }

キーの列を宣言する

行を何で識別しているかを semantic で宣言すると、検索の「キーの列」とキーの名前を使った列の条件で、その表が見つかるようになります。同じキーは、データセットをまたいで突き合わせられる列にだけ付けます。

fields:
  - name: municipality_code
    title: 全国地方公共団体コード
    semantic: { role: entity, name: city }

name に書けるキーは次のとおりです。コードの桁が違っても、変換すれば突き合わせられる列(5 桁と検査数字付き 6 桁の団体コードなど)には同じキーを付けます。

キー 単位 例
prefecture 都道府県 都道府県コード、都道府県名
city 市区町村 全国地方公共団体コード、市区町村名
small_area 町丁・字等 国勢調査の小地域コード(KEY_CODE)、町丁目名
mesh 地域メッシュ 標準地域メッシュコード
corporate_number 法人 13 桁の法人番号
postal_code 郵便番号の区域 7 桁の郵便番号

この一覧に無いキーを書くと、queria compile が警告します。公開は止まりませんが、検索のキーの列には出ません。

公開設定にすると何が起きるか

データセットには公開と非公開があります。非公開のあいだは自分(と組織のメンバー)にしか見えません。切り替えは次のとおりです。

uvx queria create my-dataset --public   # 作るときに指定する
uvx queria edit my-dataset --visibility public   # あとから変える

公開にすると、次の場所に載ります。

場所 何が出るか
データセット一覧 データセットのカード。タイトル・説明・タグ・テーブル数
一覧のテーブル検索 テーブルとカラムの名前・タイトル・説明
データセットのページ 表・カラム・SQL 定義・リネージュ・更新履歴
sitemap.xml と llms.txt データセットとテーブルの URL

どの画面にも提供者のハンドルが出ます。 一覧のカードにも、データセットのページにも <ハンドル> / <データセット名> の形で表示されます。誰が公開したデータかを読み手が必ず分かるようにするためです。

これらのページは検索エンジンに収集されることがあります。非公開に戻すと Queria 上の掲載は止まりますが、検索エンジンの索引から消えるまでには時間がかかります。

公開設定の切り替えは、データの配信に反映されるまで最大 60 秒かかります。 非公開に戻した直後の 60 秒は、それまでに配信元を知っていた相手からデータを読めることがあります。

詰まりやすいところ

ライセンスは推測されません。 レジストリに無い ID を書くと validate が止まります。省略もできますが、その場合は全権利を留保することになり、利用者が何をしてよいかは Queria の利用規約に委ねられます。validate が警告します。

*.table.yml を dbt の model-paths の下に置くなら、.dbtignore に *.table.yml を足してください。 dbt はその下の .yml を自分のプロパティファイルとして読もうとして失敗します。validate が教えてくれます。

行数の少ないテーブルは parquet が書かれないことがあります。 DuckLake の既定ではカタログの中に値が埋め込まれるため、データファイルが 1 つも生成されないことがあります。ビルド側で DATA_INLINING_ROW_LIMIT を 0 にしてください。

15 分を超えるビルドは認証情報を取り直してください。 書き込みに使う認証情報は 15 分で切れます。DuckDB は期限を見て取り直さないので、それより長いビルドは途中から書けなくなり、403 SignatureDoesNotMatch で止まります。queria の Secret を書き込みの切れ目で呼んでください。

from queria import Secret

secret = Secret(conn)
secret.install()

for batch in batches:
    secret.refresh_if_due()   # 間隔が来るまで何もしません
    write(batch)

refresh_if_due() はトランザクションの外で呼んでください。また、1 つの文が 15 分を超える場合は救えません。 その文を分けてください。

書き込み用の認証情報は、1 つのアカウントにつき同時に 5 本までです。 queria sync は 1 回のビルドで複数本を使うので、CI と手元で同じアカウントのビルドを並べると、push が HTTP 429(Too many credential requests)で止まることがあります。ビルドの失敗ではありません。エラーに次の 1 本が切れる時刻が出るので、その時刻を過ぎてから再実行してください。

何を書くかで迷ったら

説明をどの階層に書くかには規約があります。説明の書き分けを参照してください。

エージェントに任せる

公開手順と説明の書き方は、それぞれエージェントスキルとしても配布しています。導入方法は Queria スキルを参照してください。

  • queria-publish-dataset — 登録からビルド、公開まで
  • queria-describe-dataset — 何をどこに書くか

このページは役に立ちましたか?