You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Apache Drill中从JSON文件获取列名

使用Apache Drill提取嵌套JSON的列名

场景说明

我正在使用Apache Drill校验JSON文件,处理线性及嵌套JSON数据。JSON文件存储在Drill临时存储dfs/tmp/employee_src_reg_json.json,数据结构如下:

{
  "employee_reg": [
    {
      "EmployeeID": 1,
      "FirstName": "John",
      "LastName": "Doe",
      "Age": 35,
      "Salary": 60000,
      "Department": "Engineering",
      "Experience": 8
    },
    {
      "EmployeeID": 2,
      "FirstName": "Jane",
      "LastName": "",
      "Age": 28,
      "Salary": 50000,
      "Department": "Marketing",
      "Experience": 5
    },
    {
      "EmployeeID": 3,
      "FirstName": "Michael",
      "LastName": "Johnson",
      "Age": 40,
      "Salary": 70000,
      "Department": "Finance",
      "Experience": 12
    },
    {
      "EmployeeID": 4,
      "FirstName": "Emily",
      "LastName": "Williams",
      "Age": 32,
      "Salary": 65000,
      "Department": "Human Resources",
      "Experience": 9
    }
  ]
}

尝试过的无效查询

  • DESCRIBE dfs/tmp/employee_src_reg_json.json:返回无可用数据
  • DESCRIBE (SELECT * FROM (SELECT FLATTEN(t.employee_reg) AS emp FROM dfs.tmp.employee_src_reg_json.json t) LIMIT 1):返回第一个JSON数组值而非列名
  • (SELECT FLATTEN(t.employee_reg) AS flatdata FROM dfs.tmp.employee_src_reg_json.json t):返回执行计划而非列名
  • SHOW COLUMNS IN (SELECT FLATTEN(t.employee_reg) FROM dfs.tmp.employee_src_reg_json.json t):未得到预期结果

请问如何获取该JSON文件的列名?


有效解决方案

方法1:通过展开后的数据查询列名(LIMIT 0)

使用FLATTEN展开嵌套数组后,通过SELECT *结合LIMIT 0仅返回结构,不返回数据行:

SELECT * FROM (
  SELECT FLATTEN(t.employee_reg) AS emp FROM dfs.tmp.employee_src_reg_json.json t
) LIMIT 0

执行后会直接列出emp.EmployeeID、emp.FirstName等完整嵌套列名。

方法2:正确使用DESCRIBE解析展开后的字段

先将嵌套字段展开为独立列,再用DESCRIBE获取结构:

DESCRIBE (
  SELECT emp.* FROM (
    SELECT FLATTEN(t.employee_reg) AS emp FROM dfs.tmp.employee_src_reg_json.json t
  ) LIMIT 0
)

此方式会返回每个字段的名称和数据类型。

方法3:通过INFORMATION_SCHEMA查询元数据

利用Drill的元数据表直接查询列名:

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'dfs.tmp' 
AND TABLE_NAME = 'employee_src_reg_json.json'

注意:若首次加载文件后元数据未更新,可执行REFRESH TABLE dfs.tmp.employee_src_reg_json.json刷新后再查询。


内容的提问来源于stack exchange,提问作者Sarmila Mohanraj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 00:11:07