在 GitHub 上编辑

外部数据

若要对位于本地项目之外的数据进行版本管理,可以将其导入。你可以选择是否下载该数据,以及是否将副本推送到你的DVC 远程存储。即使你希望在原始源位置就地跟踪数据,这种导入方式仍然很有用。

如果你想在管道中使用外部数据,请参阅外部依赖项和输出

导入外部数据的工作原理

使用import-url导入外部数据:

$ dvc import-url https://data.dvc.org/get-started/data.xml
Importing 'https://data.dvc.org/get-started/data.xml' -> 'data.xml'

这会将文件下载到data.xml(如果想跳过此步骤,请参见避免重复)。同时会创建data.xml.dvc文件,用于跟踪源数据。

# ...
deps:
  - etag: '"f432e270cd634c51296ecd2bc2f5e752-5"'
    path: https://data.dvc.org/get-started/data.xml
outs:
  - md5: a304afb96060aad90176268345e10355
    path: data.xml
    cache: true
    persist: false

DVC 会检查服务器返回的头部信息,查找HTTP ETagContent-MD5头部,并利用它判断源数据是否已更改,从而决定是否需要重新下载文件。

要检查源位置是否有更新,请运行dvc update

$ dvc update data.xml.dvc
'data.xml.dvc' didn't change, skipping

在执行dvc push时,DVC 会将data.xml.dvc所跟踪的数据版本上传到DVC 远程存储,以便备份,以防将来需要恢复。

DVC 永远不会覆盖数据的源位置。相反,DVC 可以在本地检出该数据的任意版本。DVC 的设计目的是保护原始数据,防止意外覆盖或发生其他用户未预料到的更改,因此你可以在不丢失当前源位置所存内容的前提下恢复旧版本。

避免重复

在某些情况下,复制外部数据可能是不必要的或不切实际的,例如当你的数据太大而无法本地下载,或者你直接从源位置流式读取数据,又或者你已经使用云版本控制来备份旧版本。

使用--no-download选项可在导入或更新数据时跳过下载步骤。DVC 会将元数据保存在data.xml.dvc中,但不会在本地下载data.xml

$ dvc import-url --no-download https://data.dvc.org/get-started/data.xml
Importing 'https://data.dvc.org/get-started/data.xml' -> 'data.xml'

$ ls
data.xml.dvc

之后若要恢复此版本的数据,可使用dvc pull,DVC 将尝试从其原始源位置下载数据。然而,如果你已覆盖了原始源数据,dvc pull可能会失败。为了能够恢复任意版本的数据,你可以将数据推送到DVC 远程存储,或使用云版本控制

示例:推送到远程

dvc import-url --to-remote不会在本地下载数据,而是直接将数据推送到DVC 远程存储

$ dvc import-url --to-remote https://data.dvc.org/get-started/data.xml

$ ls
data.xml.dvc

$ dvc push
Everything is up to date.

示例:云版本控制

如果从支持的云版本控制提供商导入数据,使用dvc import-url --no-download --version-aware将不会在本地下载数据,而是跟踪云提供商为数据分配的版本 ID。dvc pull会尝试下载这些版本 ID(只要它们仍然可用)。dvc push不会上传任何内容,因为 DVC 假定这些版本在源位置始终可用:

$ dvc import-url --no-download --version-aware s3://myversionedbucket/data.xml
Importing 's3://myversionedbucket/data.xml' -> 'data.xml'

$ ls
data.xml.dvc

$ dvc push
Everything is up to date.
内容

🐛 发现问题?告诉我们!或者修复它:

在 GitHub 上编辑

有疑问?加入我们的聊天,我们会为您提供帮助:

Discord 聊天