"죽음과 세금 외에는 확실한 것은 없습니다."
이것은 데이터 세트가 아닙니다. 장미의 침대 또는 잘 다듬어진 녹색 잔디. 조금 더 심각합니다. 여기서 빠르게 배울 수 있는 것이 있는지 살펴봅시다. 데이터 세트는 다음과 같습니다.
"name" : "NCHS - 주요 사망 원인: 미국",
"속성" : "국립 보건 통계 센터",
대중 d아타셋은 다음에서 구입할 수 있습니다. https://data.cdc.gov/api/views/bi63-dtpu/rows.json?accessType=DOWNLOAD
1단계: 파일을 로컬 파일(예: health.json)로 다운로드합니다. 이 파일을 카우치베이스 클러스터의 노드 중 하나에 업로드합니다.
2단계라는 버킷으로 데이터를 가져옵니다. 버킷을 만든 후에는 기본 인덱스를 만듭니다. 쿼리를 위해 이 인덱스가 필요합니다.
/opt/couchbase/bin/cbimport json -c couchbase://127.0.0.1 -u 관리자 -p 비밀번호 -b 원인 -d 파일://health.json -g 원인:0 -f 샘플
> 원인에 기본 인덱스를 생성합니다;
3단계. 데이터의 구조를 검사합니다.
모든 데이터는 단일 JSON 문서로 제공됩니다. 따라서 INFER는 도움이 되지 않습니다. 구조를 수동으로 검사하고 이해해야 합니다. 이 데이터는 메타데이터에 각 엔티티의 의미와 함께 단순한 배열로 된 많은 데이터가 있는 일반적인 정부 데이터 세트입니다.
단순 배열:
|
1 |
<strong>select data from cause ;</strong> |

여기에는 스키마 없이 단순히 데이터 배열이 포함되어 있습니다. 공개 데이터 집합의 경우 스키마는 메타 필드에 있습니다.

구조를 간단한 JSON 키-값 쌍으로 변환하여 좀 더 효과적으로 처리할 수 있도록 해보겠습니다. 이 마법이 어떻게 일어났는지 자세히 알아보세요. 이 문서에서.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
WITH cs AS ( SELECT meta.`view`.columns [*].fieldName f, data FROM cause ) SELECT o FROM cs UNNEST cs.data AS d1 LET o = OBJECT p :d1 [ARRAY_POSITION(cs.f, p)] FOR p IN cs.f END; |

과제1: 한 주에서 연도별로 가장 많이 사망한 원인을 찾습니다.
WITH 절의 공통 테이블 표현식(CTE)은 복잡한 json 데이터를 플랫 JSON으로 변환합니다(csdata). 이 작업을 동적으로 수행하거나, 이 작업을 한 번 수행한 후 버킷에 다시 INSERT할 수 있습니다. 뉴욕 아기 이름. 이 글에서는 CTE를 사용합니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
WITH csdata as ( WITH cs AS ( SELECT meta.`view`.columns [*].fieldName f, data FROM cause ) SELECT o FROM cs UNNEST cs.data AS d1 LET o = OBJECT p :d1 [ARRAY_POSITION(cs.f, p)] FOR p IN cs.f END ) SELECT c.o.state, c.o.year, c.o.cause_name, COUNT(c.o.cause_name), SUM(TONUMBER(c.o.deaths)) totdeaths FROM csdata as c WHERE c.o.state <> "United States" and c.o.cause_name <> "All causes" GROUP BY c.o.state, c.o.year, c.o.cause_name ORDER BY totdeaths DESC, c.o.state, c.o.year |

이 경우 캘리포니아의 모든 사망자는 주로 인구로 인해 가장 많이 발생합니다.
과제 2. 2016년 한 해 동안 각 주의 주요 사망 원인을 알아보세요.
쿼리 2: 이전 쿼리의 결과 집합을 사용한 다음 FIRST_VALUE() 창 함수를 사용하여 상위 원인을 확인합니다. OVER BY 절에서 상태별로 파티션을 나누면 상태별 파티션을 얻을 수 있고, OVER BY 절 내에서 ORDER BY dx.totdeaths를 사용하면 모든 상태의 상위 원인을 얻을 수 있습니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
WITH csdata as ( WITH cs AS ( SELECT meta.`view`.columns [*].fieldName f, data FROM cause ) SELECT o FROM cs UNNEST cs.data AS d1 LET o = OBJECT p :d1 [ARRAY_POSITION(cs.f, p)] FOR p IN cs.f END ), d2 as( SELECT c.o.state, c.o.year, c.o.cause_name, SUM(TONUMBER(c.o.deaths)) totdeaths FROM csdata as c WHERE c.o.state <> "United States" and c.o.cause_name <> "All causes" and c.o.year = "2016" GROUP BY c.o.state, c.o.year, c.o.cause_name), d3 as ( SELECT dx.state, dx.cause_name, dx.totdeaths, FIRST_VALUE(dx.cause_name) OVER(PARTITION BY dx.state ORDER BY dx.totdeaths DESC) topreason, FIRST_VALUE(dx.totdeaths) OVER(PARTITION BY dx.state ORDER BY dx.totdeaths DESC) topcount FROM d2 dx) SELECT d3 FROM d3 WHERE d3.topcount = d3.totdeaths order by d3.state |


작업 3. 1999년부터 2016년까지 주별로 가장 큰 이유가 연도별로 어떻게 변화했는지 알아보세요.
쿼리 3: 모든 연도(199-2016)에 대한 보고서를 생성한 다음 주, 연도별로 그룹화하고 최고 이유에 대한 최대값(최고 수)을 구하여 최고 이유를 결정하면 최종적으로 최고 이유를 얻을 수 있습니다.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
WITH csdata as ( WITH cs AS ( SELECT meta.`view`.columns [*].fieldName f, data FROM cause ) SELECT o FROM cs UNNEST cs.data AS d1 LET o = OBJECT p :d1 [ARRAY_POSITION(cs.f, p)] FOR p IN cs.f END ), d2 as( SELECT c.o.state, c.o.year, c.o.cause_name, SUM(TONUMBER(c.o.deaths)) totdeaths FROM csdata as c WHERE c.o.state <> "United States" and c.o.cause_name <> "All causes" GROUP BY c.o.state, c.o.year, c.o.cause_name), d3 as ( SELECT dx.state, dx.year, FIRST_VALUE(dx.cause_name) OVER(PARTITION BY dx.state, dx.year ORDER BY dx.totdeaths DESC ) topreason, FIRST_VALUE(dx.totdeaths) OVER(PARTITION BY dx.state, dx.year ORDER BY dx.totdeaths DESC) topcount FROM d2 dx) SELECT d3.state , d3.year , d3.topreason, max(d3.topcount) topcount FROM d3 GROUP BY d3.state, d3.year, d3.topreason order by d3.state, d3.year |
다음은 일부 결과입니다.



이를 시각화하면 다음과 같은 히스토그램이 나타납니다.
