跳到主要内容
跳到主要内容

NOAA 全球历史气候网络

这个数据集包含了过去120年的气象测量数据。每一行代表一个时间点和一个气象站的测量值。

更准确地说,根据该数据的来源

GHCN-Daily是一个包含全球陆地日常观察的数据集。它包含来自全球陆地气象站的基于站点的测量,其中约三分之二的数据仅用于降水测量(Menne等,2012)。GHCN-Daily是来自多个来源的气候记录的复合体,这些记录经过合并并接受了共同的质量保证审查(Durre等,2010)。该档案包括以下气象要素:

  • 日最高气温
  • 日最低气温
  • 观察时的气温
  • 降水量(即雨水、融化的雪)
  • 降雪量
  • 雪深
  • 其他可用的要素

以下部分简要概述了将此数据集引入ClickHouse所涉及的步骤。如果您有兴趣详细了解每个步骤,我们建议您查看我们标题为"探索庞大的现实世界数据集:ClickHouse中的100多年的天气记录"的博客文章。

下载数据

  • 一个预准备版本的数据,已被清理、重新构造和丰富。该数据覆盖1900年至2022年。
  • 下载原始数据并转换为ClickHouse所需的格式。希望添加自己列的用户可以探索这种方法。

预准备数据

更具体地说,已删除未通过Noaa的任何质量保证检查的行。数据也已从每行一个测量值重构为每个气象站ID和日期一行,即。

这种结构更容易查询,并确保结果表的稀疏性降低。最后,数据还通过添加经纬度进行了丰富。

该数据可在以下S3位置获取。您可以将数据下载到本地文件系统(并使用ClickHouse客户端插入)或直接插入到ClickHouse中(请参阅从S3插入)。

下载方式:

原始数据

以下详细说明了下载和转换原始数据以准备加载到ClickHouse中的步骤。

下载

要下载原始数据:

采样数据

总结格式文档:

总结格式文档及其列:

  • 11个字符的站点识别代码。它本身编码了一些有用的信息。
  • YEAR/MONTH/DAY = 8个字符的日期,格式为YYYYMMDD(例如19860529 = 1986年5月29日)。
  • ELEMENT = 4个字符元素类型指示符。实际上是测量类型。虽然有许多测量可用,但我们选择以下:
    • PRCP - 降水量(十分之一毫米)
    • SNOW - 降雪量(毫米)
    • SNWD - 雪深(毫米)
    • TMAX - 最高气温(十分之一度C)
    • TAVG - 平均气温(十分之一度C)
    • TMIN - 最低气温(十分之一度C)
    • PSUN - 每日日照百分比(百分比)
    • AWND - 平均日风速(十分之一米每秒)
    • WSFG - 峰值阵风速(十分之一米每秒)
    • WT** = 天气类型,其中**定义天气类型。完整天气类型列表在此。
  • DATA VALUE = 5个字符的数据值,对应于ELEMENT,即测量的值。
  • M-FLAG = 1个字符的测量标记。这有10个可能的值。其中一些值表示数据准确性可疑。我们接受当其设置为"P"时的数据 - 识别为缺失推定为零,因这是只与PRCP、SNOW和SNWD测量相关。
  • Q-FLAG是测量质量标志,有14个可能值。我们只对空值的数据感兴趣,即未通过任何质量保证检查的数据。
  • S-FLAG是观察源标志。对我们的分析没有用,忽略。
  • OBS-TIME = 4个字符的观察时间,格式为小时-分钟(即0700 = 早上7:00)。通常在较旧的数据中不出现。我们在此过程中忽略它。

每行一个测量值会导致ClickHouse中稀疏的表结构。我们应该将数据转换为每个时间和气象站一行,每种测量类型及其相关值为一列。首先,我们将数据集限制为那些没有问题的行,即qFlag等于空字符串的行。

清理数据

使用ClickHouse local,我们可以过滤出代表感兴趣的测量值并满足我们质量要求的行:

由于有超过26亿行,由于需要解析所有文件,查询速度较慢。在我们的8核机器上,大约需要160秒。

透视数据

虽然每行一个测量值的结构可以与ClickHouse一起使用,但这会不必要地复杂化未来的查询。理想情况下,我们需要每个气象站ID和日期一行,其中每个测量类型及其相关值作为列,即。

使用ClickHouse local和简单的GROUP BY,我们可以将数据重新透视为这种结构。为了限制内存开销,我们一次处理一个文件。

该查询生成一个50GB的文件noaa.csv

丰富数据

数据中除了站点ID外没有位置信息,站点ID包含一个前缀国家代码。理想情况下,每个气象站应该有与之关联的经纬度。为此,NOAA便捷地提供了每个气象站的详细信息,作为单独的ghcnd-stations.txt。该文件有几个列,其中对我们未来的分析有用的有五个:id、纬度、经度、海拔和名称。

该查询运行需几分钟,生成6.4 GB的文件noaa_enriched.parquet

创建表

在ClickHouse中创建一个MergeTree表(通过ClickHouse客户端)。

插入到ClickHouse

从本地文件插入

可以如下从本地文件插入数据(通过ClickHouse客户端):

其中<path>代表磁盘上本地文件的完整路径。

请参见这里以了解如何加速此加载。

从S3插入

有关如何加速这一过程,请参见我们关于优化大数据加载的博客文章。

示例查询

史上最高气温

Furnace Creek记录一致,截止2023年。

最佳滑雪胜地

使用滑雪胜地列表及其各自的位置,我们将这些与过去5年中降雪量最多的前1000个气象站进行联接。通过geoDistance对该联接进行排序,并将结果限制在距离小于20公里的情况下,我们选择每个滑雪胜地的首个结果,并按降雪总量进行排序。请注意我们还限制滑雪胜地的海拔在1800米以上,作为良好滑雪条件的广泛指标。

感谢

我们要感谢全球历史气候网络在准备、清理和分发此数据方面所做的努力。我们对此表示感谢。

Menne, M.J., I. Durre, B. Korzeniewski, S. McNeal, K. Thomas, X. Yin, S. Anthony, R. Ray, R.S. Vose, B.E.Gleason, 和 T.G. Houston, 2012: 全球历史气候网络 - 每日 (GHCN-Daily), 版本3. [指示小数点后的子集,例如版本3.25]。 NOAA国家环境信息中心。 http://doi.org/10.7289/V5D21VHZ [17/08/2020]