亚洲乱色熟女一区二区三区丝袜,天堂√中文最新版在线,亚洲精品乱码久久久久久蜜桃图片,香蕉久久久久久av成人,欧美丰满熟妇bbb久久久

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

GB級比較大的JSON怎么讀取解析呢?

admin
2024年3月28日 23:5 本文熱度 1920

比較大的JSON怎么讀取呢?,一兩個G的json,open直接讀取會卡死吧。

這是某群前些天某人的一個提問以及我的回答。

這個話題讓我想到2016年,客戶扔了個10G的json文件過來,BA想提取里面的信息,卻發(fā)現(xiàn)Windows下沒有合適的工具打開它,問我咋辦,我當時是用grep處理的。后來知道了jq[1],

jq 是一個輕量級且靈活的命令行JSON處理器,它被設計來處理JSON數(shù)據(jù),就像sed用于處理文本數(shù)據(jù)一樣。你可以使用jq來切片、過濾、映射和轉(zhuǎn)換結(jié)構(gòu)化數(shù)據(jù),其語法簡潔,易于上手。

jq是一個強大的工具,特別適合需要處理和轉(zhuǎn)換JSON數(shù)據(jù)的開發(fā)者和系統(tǒng)管理員使用。它的設計哲學和功能集使得它成為處理JSON數(shù)據(jù)的不二之選。

其實這個不二之選,自從有了DuckDB,就不成立了。相比較jq,還是DuckDB更香。

其實我之前就向大家介紹了DuckDB的文章,探索DuckDB:使用SQL和DuckDB分析JSON數(shù)據(jù)

今天看到一篇文章,和我的想法不謀而合。DuckDB as the New jq[2] 

以下是全文,

最近,我對DuckDB[3]項目(一個面向數(shù)據(jù)應用的SQLite[4])產(chǎn)生了興趣。它最令人驚嘆的特性之一是包含了許多數(shù)據(jù)導入器,而且不需要額外的依賴。這意味著它可以直接將JSON作為數(shù)據(jù)庫表讀取和解析,同時還支持許多其他格式。

我日常工作中大量使用JSON,經(jīng)常使用 jq[5]來探索文檔。我喜歡jq,但我發(fā)現(xiàn)它難以使用。它的語法非常強大,但我每次想要做超出僅僅選擇字段的操作時,都必須研究文檔。

一旦我了解到DuckDB可以直接將JSON文件讀取到內(nèi)存中,我就意識到我可以用它來做很多我目前使用jq做的事情。與復雜且自定義的jq語法相比,我對SQL非常熟悉,并且?guī)缀趺刻於荚谑褂谩?/p>

這里有一個例子:

首先,我們獲取一些示例JSON來玩。我使用GitHub API獲取了golang組織的倉庫信息:

% curl 'https://api.github.com/orgs/golang/repos' > repos.json

現(xiàn)在,作為一個示例問題來回答,讓我們獲取一些關(guān)于使用的開源許可證類型的統(tǒng)計信息。

JSON結(jié)構(gòu)如下所示:

[
  {
    "id": 1914329,
    "name": "gddo",
    "license": {
      "key": "bsd-3-clause",
      "name": "BSD 3-Clause \"New\" or \"Revised\" License",
      ...
    },
    ...
  },
  {
    "id": 11440704,
    "name": "glog",
    "license": {
      "key": "apache-2.0",
      "name": "Apache License 2.0",
      ...
    },
    ...
  },
  ...
]

這可能不是最好的方法,但在我搜索并閱讀了一些關(guān)于如何在jq中做到這一點的文檔后,我拼湊出了以下內(nèi)容:

 % cat repos.json | jq 'group_by(.license.key)
  | map({license: .[0].license.key, count: length})
  | sort_by(.count)
  | reverse'
[
  {
    "license": "bsd-3-clause",
    "count": 23
  },
  {
    "license": "apache-2.0",
    "count": 5
  },
  {
    "license": null,
    "count": 2
  }
]

在DuckDB中使用SQL是這樣的:

% duckdb -c "
  select license->>'key' as license, count(*) as count 
  from 'repos.json' 
  group by 1 
  order by count desc"
┌──────────────┬───────┐
│   license    │ count │
│   varchar    │ int64 │
├──────────────┼───────┤
│ bsd-3-clause │    23 │
│ apache-2.0   │     5 │
│              │     2 │
└──────────────┴───────┘

對我來說,這個SQL要簡單得多,我能夠不查看任何文檔就寫出來。唯一的難點是使用->>操作符查詢嵌套的JSON。這種語法與PostgreSQL JSON Functions[6]相同,所以我對此很熟悉。

如果我們確實需要以JSON格式輸出,DuckDB提供了一個標志來實現(xiàn)這一點:

% duckdb -json -c "
  select license->>'key' as license, count(*) as count 
  from 'repos.json' 
  group by 1 
  order by count desc"
[{"license":"bsd-3-clause","count":23},{"license":"apache-2.0","count":5},{"license":null,"count":2}]

我們甚至可以在DuckDB完成重活之后,使用jq來美化輸出:

% duckdb -json -c "
  select license->>'key' as license, count(*) as count 
  from 'repos.json' 
  group by 1 
  order by count desc" | jq
[
  {
    "license": "bsd-3-clause",
    "count": 23
  },
  {
    "license": "apache-2.0",
    "count": 5
  },
  {
    "license": null,
    "count": 2
  }
]

JSON只是導入DuckDB數(shù)據(jù)的多種方式之一。這種方法同樣適用于CSV、parquet、Excel文件等。

我可以選擇創(chuàng)建表并本地持久化,但通常我只是在查詢數(shù)據(jù),不需要持久化。

想要了解更多關(guān)于DuckDB出色的JSON支持,請閱讀這篇博客文章:一次一個向量地撕裂深層嵌套的JSON[7]

更新:

我還了解到,DuckDB可以直接從URL讀取JSON,而不僅僅是本地文件:

% duckdb -c "
  select license->>'key' as license, count(*) as count 
  from read_json('https://api.github.com/orgs/golang/repos')  
  group by 1 
  order by count desc"

引用鏈接

[1] jq: https://jqlang.github.io/jq/
[2] DuckDB as the New jq: https://www.pgrs.net/2024/03/21/duckdb-as-the-new-jq/
[3] DuckDB: https://duckdb.org/
[4] SQLite: https://www.sqlite.org/
[5] jq: https://jqlang.github.io/jq/
[6] PostgreSQL JSON Functions: https://www.postgresql.org/docs/current/functions-json.html
[7] 一次一個向量地撕裂深層嵌套的JSON: https://duckdb.org/2023/03/03/json.html


該文章在 2024/3/28 23:05:22 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點晴ERP是一款針對中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國內(nèi)大量中小企業(yè)的青睞。
點晴PMS碼頭管理系統(tǒng)主要針對港口碼頭集裝箱與散貨日常運作、調(diào)度、堆場、車隊、財務費用、相關(guān)報表等業(yè)務管理,結(jié)合碼頭的業(yè)務特點,圍繞調(diào)度、堆場作業(yè)而開發(fā)的。集技術(shù)的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點晴WMS倉儲管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved