테이블 매니페스트 업로드

코드 편집기 UI 또는 'earthengine' 명령줄 도구upload 명령어보다 더 유연하게 Google Earth Engine (EE)에 테이블을 업로드해야 하는 경우 '매니페스트'라는 JSON 파일을 사용하여 테이블 업로드를 설명하고 명령줄 도구의 upload table --manifest 명령어를 사용하면 됩니다.

1회 설정

  1. 매니페스트 업로드는 Google Cloud Storage에 있는 파일에서만 작동합니다. Google Cloud Storage를 사용하려면 아직 프로젝트가 없는 경우 Google Cloud 프로젝트를 만듭니다. 설정하려면 결제용 신용카드를 지정해야 합니다. 현재 EE 자체는 누구에게도 요금을 청구하지 않지만 EE에 파일을 업로드하기 전에 Google Cloud Storage로 파일을 전송하면 소액의 비용이 발생합니다. 일반적인 업로드 데이터 크기 (수십 또는 수백 기가바이트)의 경우 비용이 매우 낮습니다.
  2. 프로젝트 내에서 Cloud Storage API를 사용 설정하고 버킷을 만듭니다.
  3. Earth Engine Python 클라이언트를 설치합니다. 여기에는 데이터 업로드에 사용할 earthengine 명령줄 도구가 포함되어 있습니다.
  4. 자동 업로드의 경우 프로젝트와 연결된 Google Cloud 서비스 계정을 사용하는 것이 좋습니다. 테스트에는 서비스 계정이 필요하지 않지만, 잠시 시간을 내어 서비스 계정 사용법을 숙지하세요.

저작물 ID 및 이름

Cloud 프로젝트의 애셋에는 projects/my_cloud_project/assets/my_asset를 사용하세요.

이전 기존 프로젝트의 경우 매니페스트의 애셋 이름이 Earth Engine의 다른 위치에 표시되는 애셋 ID와 약간 달라야 합니다. 저작물 ID가 users/some_user 또는 projects/some_project로 시작하는 저작물을 업로드하려면 매니페스트의 저작물 이름에 ID 앞에 projects/earthengine-legacy/assets/ 문자열을 추가해야 합니다. 예를 들어 EE 애셋 ID users/username/my_tableprojects/earthengine-legacy/assets/users/username/my_table라는 이름을 사용하여 업로드해야 합니다.

예. 즉, projects/some_projects/some_asset와 같은 ID가 projects가 두 번 언급된 이름(projects/earthengine-legacy/assets/projects/some_projects/some_asset)으로 변환됩니다. 이는 혼란스럽지만 Google Cloud API 표준을 준수하는 데 필요합니다.

매니페스트 사용

가능한 가장 간단한 매니페스트는 다음과 같습니다. gs://earthengine-test라는 Google Cloud Storage 버킷에서 small.csv라는 파일을 업로드합니다.

{
  "name": "projects/some-project-id/assets/some-asset-id",
  "sources": [
    {
      "uris": [
        "gs://earthengine-test/small.csv"
      ]
    }
  ]
}

사용하려면 manifest.json 파일에 저장하고 다음을 실행합니다.

earthengine upload table --manifest /path/to/manifest.json

gs://earthengine-test/small.csv 파일이 존재하며 공개적으로 읽을 수 있습니다. 테스트에 사용할 수 있습니다.

셰이프파일 업로드의 경우 .shp 파일만 지정합니다. 다른 파일은 자동으로 감지됩니다.

여러 소스

소스당 하나의 파일로 여러 CSV 또는 셰이프파일 소스를 지정할 수 있습니다. 이 경우 각 CSV 파일의 구조가 동일해야 합니다. 예를 들어 region1.csvregion2.csv라는 두 개의 CSV 파일이 있습니다.

id shape
1 {"type":"Point","coordinates":[-119,36]}
2 {"type":"Point","coordinates":[-118,37]}
3 {"type":"Point","coordinates":[-117,38]}
id shape
4 {"type":"Point","coordinates":[-112,40]}
5 {"type":"Point","coordinates":[-111,41]}
6 {"type":"Point","coordinates":[-110,42]}

구조는 동일하지만 콘텐츠는 다릅니다. Cloud Storage 버킷(gs://earthengine-test/region1.csvgs://earthengine-test/region2.csv)에 업로드되었습니다. 이를 Earth Engine 애셋으로 처리하려면 다음과 같이 sources 목록에 두 개의 항목이 있는 매니페스트를 만듭니다.

{
  "name": "projects/some-project-id/assets/some-asset-id",
  "sources": [
    {
      "uris": [
        "gs://earthengine-test/region1.csv"
      ]
    },
    {
      "uris": [
        "gs://earthengine-test/region2.csv"
      ]
    }
  ]
}

시작 시간 및 종료 시간

특히 컬렉션에 포함된 경우 모든 저작물에 시작 시간과 종료 시간을 지정하여 데이터에 더 많은 맥락을 제공해야 합니다. 이 입력란은 필수 입력란은 아니지만 가능한 경우 항상 사용하는 것이 좋습니다.

시작 시간과 종료 시간은 일반적으로 소스 파일이 생성된 시간이 아니라 관찰 시간을 의미합니다.

종료 시간은 편의상 제외 경계로 취급됩니다. 예를 들어 정확히 하루 동안 적용되는 확장 소재의 경우 시작 시간과 종료 시간에 연속된 두 날짜의 자정(예: 1980-01-31T00:00:00 및 1980-02-01T00:00:00)을 사용합니다. 저작물에 재생 시간이 없는 경우 종료 시간을 시작 시간과 동일하게 설정합니다. 매니페스트에서 시간을 ISO 8601 문자열로 나타냅니다. 날짜 값을 단순화하려면 종료 시간이 제외된다고 가정하는 것이 좋습니다 (예: 일일 확장 소재의 경우 다음날 자정).

예:

{
  "name": "projects/some-project-id/assets/some-asset-id",
  "sources": [
    {
      "uris": [
        "gs://bucket/table_20190612.csv"
      ]
    }
  ],
  "startTime": "1980-01-31T00:00:00Z",
  "endTime": "1980-02-01T00:00:00Z"
}

매니페스트 구조 참조

다음 JSON 구조에는 가능한 모든 테이블 업로드 매니페스트 필드가 포함됩니다. 다음 매니페스트 필드 정의 섹션에서 필드 정의를 찾습니다.

{
  "name": <string>,
  "sources": [
    {
      "uris": [
        <string>
      ],
      "charset": <string>,
      "maxErrorMeters": <double>,
      "maxVertices": <int32>,
      "crs": <string>,
      "geodesic": <boolean>,
      "primaryGeometryColumn": <string>,
      "xColumn": <string>,
      "yColumn": <string>,
      "dateFormat": <string>,
      "csvDelimiter": <string>,
      "csvQualifier": <string>,
    }
  ],
  "uriPrefix": <string>,
  "startTime": {
    "seconds": <integer>
  },
  "endTime": {
    "seconds": <integer>
  },
  "properties": {
    <unspecified>
  }
}

매니페스트 필드 정의

이름

string

만들려는 확장 소재의 이름입니다. name의 형식은 'projects/*/assets/**'입니다(예: projects/earthengine-legacy/assets/users/USER/ASSET).

소스

list

테이블 파일 및 해당 사이드카의 속성을 정의하는 필드 목록입니다. 자세한 내용은 다음 sources 사전 요소 필드를 참고하세요.

sources[i].uris

list

처리할 데이터의 URI 목록입니다. 현재 Google Cloud Storage URI만 지원됩니다. 각 URI는 gs://bucket-id/object-id 형식으로 지정되어야 합니다. 기본 객체는 목록의 첫 번째 요소여야 하며 사이드카는 그 뒤에 나열되어야 합니다. 각 URI 앞에 TableManifest.uri_prefix가 추가됩니다(설정된 경우).

sources[i].charset

string

문자열 디코딩에 사용할 기본 문자 집합의 이름입니다. 비어 있으면 기본적으로 문자 집합 'UTF-8'이 가정됩니다.

sources[i].maxErrorMeters

double

좌표계 간에 도형을 변환할 때 허용되는 최대 오류(미터)입니다. 비워 두면 기본적으로 최대 오류는 1미터입니다.

sources[i].maxVertices

int32

최대 정점 수입니다. 0이 아니면 도형이 공간적으로 서로 연결되지 않은 여러 부분으로 각각 이 한도 이하로 세분화됩니다.

sources[i].crs

string

지정되지 않은 도형의 좌표 참조 시스템을 지정하는 기본 CRS 코드 또는 WKT 문자열입니다. 비워 두면 기본값은 EPSG:4326입니다. CSV/TFRecord 소스에서만 사용할 수 있습니다.

sources[i].geodesic

boolean

달리 지정되지 않은 도형의 가장자리를 해석하기 위한 기본 전략입니다. false인 경우 투영에서 가장자리가 직선입니다. true이면 지구 표면에서 가장 짧은 경로를 따라 모서리가 곡선이 됩니다. 비워 두면 CRS가 투영된 좌표계인 경우 기본값은 false입니다. CSV/TFRecord 소스에서만 사용할 수 있습니다.

sources[i].primaryGeometryColumn

string

도형 열이 2개 이상인 경우 행의 기본 도형으로 사용할 도형 열입니다.

비워두고 도형 열이 두 개 이상 있는 경우, 발견된 첫 번째 도형 열이 사용됩니다. CSV/TFRecord 소스에서만 사용할 수 있습니다.

sources[i].xColumn

string

점 도형을 추론하기 위한 숫자 x 좌표 열의 이름입니다. yColumn도 지정되어 있고 두 열에 모두 숫자 값이 포함된 경우 CRS에 지정된 좌표계의 x,y 값으로 점 도형 열이 구성됩니다. 공백으로 두고 CRS가 투영된 좌표계를 지정하지 않으면 기본값은 'longitude'입니다. 이 필드를 비워두고 CRS가 투영된 좌표계를 지정하면 기본값은 빈 문자열이 되고 점 도형이 생성되지 않습니다.

생성된 점 도형 열의 이름은 {xColumn}_{yColumn}_N입니다. 여기서 {xColumn}_{yColumn}라는 열이 이미 있는 경우 {xColumn}_{yColumn}_N가 고유하도록 N이 추가됩니다. CSV/TFRecord 소스에서만 사용할 수 있습니다.

sources[i].yColumn

string

점 도형을 추론하기 위한 숫자 y 좌표 열의 이름입니다. xColumn도 지정되어 있고 두 열에 모두 숫자 값이 포함된 경우 CRS에 지정된 좌표계의 x,y 값으로 점 도형 열이 구성됩니다. 이 필드를 비워두고 CRS가 투영된 좌표계를 지정하지 않으면 기본값은 'latitude'입니다. 이 필드를 비워두고 CRS가 투영된 좌표계를 지정하면 기본값은 빈 문자열이 되고 점 도형이 생성되지 않습니다.

생성된 점 도형 열의 이름은 {xColumn}_{yColumn}_N입니다. 여기서 {xColumn}_{yColumn}라는 열이 이미 있는 경우 {xColumn}_{yColumn}_N가 고유하도록 N이 추가됩니다. CSV/TFRecord 소스에서만 사용할 수 있습니다.

sources[i].dateFormat

string

날짜를 인코딩하는 필드를 파싱하는 형식입니다. 형식 패턴은 Joda-Time DateTimeFormat 클래스 문서에 설명된 대로여야 합니다. 비워 두면 날짜가 문자열로 가져옵니다. CSV/TFRecord 소스에서만 사용할 수 있습니다.

sources[i].csvDelimiter

string

CSV 파일을 처리할 때 행의 열 값 간에 구분자로 사용되는 단일 문자입니다. 공백으로 두면 기본값은 ','입니다. CSV 소스만 해당합니다.

sources[i].csvQualifier

string

CSV 파일을 처리할 때 열 값을 묶는 문자('따옴표 문자'라고도 함)입니다. 공백으로 두면 기본값은 "입니다. CSV 소스만 해당합니다.

열 값이 한정자로 묶이지 않으면 선행 및 후행 공백이 잘립니다. 예를 들면 다음과 같습니다.

    ..., test,...            <== this value is not qualified
becomes the string value:
    "test"                   <== leading whitespace is stripped
while:
    ...," test",...          <== this value IS qualified with quotes
becomes the string value:
    " test"                  <== leading whitespace remains!

uriPrefix

string

매니페스트에 정의된 모든 uris 앞에 추가되는 선택적 접두사입니다.

startTime

integer

저작물과 연결된 타임스탬프입니다(있는 경우). 일반적으로 데이터가 수집된 시간에 해당합니다. 한 달 또는 1년 동안의 평균 값과 같이 시간 간격에 해당하는 애셋의 경우 이 타임스탬프는 해당 간격의 시작에 해당합니다. 에포크(1970-01-01) 이후의 초 및 (선택사항) 나노초로 지정됩니다. UTC 시간대라고 가정합니다.

endTime

integer

한 달 또는 1년 동안의 평균 값과 같이 시간 간격에 해당하는 애셋의 경우 이 타임스탬프는 해당 간격의 끝 (제외)에 해당합니다. 에포크(1970-01-01) 이후의 초 및 (선택사항) 나노초로 지정됩니다. UTC 시간대라고 가정합니다.

속성

dictionary

키-값 쌍의 임의의 평면 사전입니다. 키는 문자열이어야 하며 값은 숫자 또는 문자열일 수 있습니다. 사용자 업로드 저작물에는 아직 목록 값이 지원되지 않습니다.

columnDataTypeOverrides

dictionary

자동 유형 감지가 제대로 작동하지 않으면 열 이름을 키로, COLUMN_DATA_TYPE_STRING, COLUMN_DATA_TYPE_NUMERIC, COLUMN_DATA_TYPE_LONG 상수 중 하나를 값으로 사용하여 이 필드를 사용하세요.

제한사항

JSON 매니페스트 크기

JSON 매니페스트 파일 크기 제한은 10MB입니다. 업로드할 파일이 많은 경우 데이터 세트를 설명하는 데 필요한 문자 수를 줄이는 방법을 고려하세요. 예를 들어 uriPrefix 필드를 사용하여 uris 목록의 각 URI에 GCP 버킷 경로를 제공할 필요가 없습니다. 크기를 더 줄여야 한다면 파일 이름을 줄여 보세요.