2016-09-14 3 views
0

일부 JSON 데이터를 클라우드에 성공적으로 가져 왔으며 JSON 데이터는 세 가지 수준으로 구성됩니다. 그런 다음 클라우드로부터 dashdb웨어 하우스를 작성하여 데이터를 관계형 테이블에 넣습니다. dashdb가 JSON 데이터의 각 레벨에 대해 세 개의 테이블을 만들었지 만 최상위 레벨로 다시 조인 할 키는 제공하지 않았습니다. dashdb에게 테이블 조인 방법을 알려주는 어딘가에 커스터마이징이 있는가? 샘플 JSON의 문서는 다음과 같습니다 : 각 테이블의 모든 필드를 보여주는 dashdb에서 만든 세 개의 테이블에 대한Cloudant JSON 데이터를 dashdb 테이블 조인

{ 
    "_id": "579b56388aa56fd03a4fd0a9", 
    "_rev": "1-698183d4326352785f213b823749b9f8", 
    "v": 0, 
    "startTime": "2016-07-29T12:48:04.204Z", 
    "endTime": "2016-07-29T13:11:48.962Z", 
    "userId": "Ranger1", 
    "uuid": "497568578283117a", 
    "modes": [ 
    { 
     "startTime": "2016-07-29T12:54:22.565Z", 
     "endTime": "2016-07-29T12:54:49.894Z", 
     "name": "bicycle", 
     "_id": "579b56388aa56fd03a4fd0b1", 
     "locations": [] 
    }, 
    { 
     "startTime": "2016-07-29T12:48:02.477Z", 
     "endTime": "2016-07-29T12:53:28.503Z", 
     "name": "walk", 
     "_id": "579b56388aa56fd03a4fd0ad", 
     "locations": [ 
     { 
      "at": "2016-07-29T12:49:05.716Z", 
      "_id": "579b56388aa56fd03a4fd0b0", 
      "location": { 
      "coords": { 
       "latitude": -34.0418308, 
       "longitude": 18.3503616, 
       "accuracy": 37.5, 
       "speed": 0, 
       "heading": 0, 
       "altitude": 0 
      }, 
      "battery": { 
       "is_charging": true, 
       "level": 0.7799999713897705 
      } 
      } 
     }, 
     { 
      "at": "2016-07-29T12:49:48.488Z", 
      "_id": "579b56388aa56fd03a4fd0af", 
      "location": { 
      "coords": { 
       "latitude": -34.0418718, 
       "longitude": 18.3503895, 
       "accuracy": 33, 
       "speed": 0, 
       "heading": 0, 
       "altitude": 0 
      }, 
      "battery": { 
       "is_charging": true, 
       "level": 0.7799999713897705 
      } 
      } 
     }, 
     { 
      "at": "2016-07-29T12:50:20.760Z", 
      "_id": "579b56388aa56fd03a4fd0ae", 
      "location": { 
      "coords": { 
       "latitude": -34.0418788, 
       "longitude": 18.3503887, 
       "accuracy": 33, 
       "speed": 0, 
       "heading": 0, 
       "altitude": 0 
      }, 
      "battery": { 
       "is_charging": true, 
       "level": 0.7799999713897705 
      } 
      } 
     } 
     ] 
    }, 
    { 
     "startTime": "2016-07-29T12:53:37.137Z", 
     "endTime": "2016-07-29T12:54:18.505Z", 
     "name": "carshare", 
     "_id": "579b56388aa56fd03a4fd0ac", 
     "locations": [] 
    }, 
    { 
     "startTime": "2016-07-29T12:54:54.112Z", 
     "endTime": "2016-07-29T13:11:47.818Z", 
     "name": "bus", 
     "_id": "579b56388aa56fd03a4fd0aa", 
     "locations": [ 
     { 
      "at": "2016-07-29T13:00:08.039Z", 
      "_id": "579b56388aa56fd03a4fd0ab", 
      "location": { 
      "coords": { 
       "latitude": -34.0418319, 
       "longitude": 18.3503623, 
       "accuracy": 36, 
       "speed": 0, 
       "heading": 0, 
       "altitude": 0 
      }, 
      "battery": { 
       "is_charging": false, 
       "level": 0.800000011920929 
      } 
      } 
     } 
     ] 
    } 
    ] 
} 

SQL은 여기에있다. 내가 볼 수있는 FK가 없다는 것을 유의하십시오. "_ID"필드는 각 테이블마다 고유합니다.

SELECT ENDTIME,STARTTIME,USERID,UUID,V,"_ID","_REV" 
FROM <schemaname>.RANGER_DATA 
where "_ID" = '579b56388aa56fd03a4fd0a9' 

SELECT ARRAY_INDEX,ENDTIME,NAME,STARTTIME,TOTALPAUSEDMS,"_ID" 
FROM <schemaname>.RANGER_DATA_MODES 
where "_ID" = '579b56388aa56fd03a4fd0b1' 

SELECT ARRAY_INDEX,AT,LOCATION_BATTERY_IS_CHARGING,LOCATION_BATTERY_LEVEL,LOCATION_COORDS_ACCURACY,LOCATION_COORDS_ALTITUDE,LOCATION_COORDS_HEADING,LOCATION_COORDS_LATITUDE,LOCATION_COORDS_LONGITUDE,LOCATION_COORDS_SPEED,RANGER_DATA_MODES,"_ID" 
FROM <schemaname>.RANGER_DATA_MODES_LOCATIONS 
where "_ID" = '579b56388aa56fd03a4fd0b0' 
+0

웨어 하우징 태스크가 자동으로 키를 작성해야합니다. 생성되는 JSON 및 해당 테이블의 예를 공유 할 수 있습니까? –

+0

Cloudant는 _id를 각 문서의 UID로 사용합니다. 내 생각 엔웨어 하우스 작업은 모드 및 위치에서 _id를 감지하고 새 문서라고 가정합니다. ID의 이름을 변경하려고하면 ID가 작동합니까? –

+0

그게 문제 인 것처럼 보였습니다. 모든 _id가 단지 id로 바뀌 었습니다. 이제 dashdb 테이블이 더 좋아 보입니다. – binway

답변

0

Cloudant는 각 문서의 UID에 _id를 사용합니다. 웨어 하우징 작업은 이러한 문서를 반복하고 새로운 _id가 나타날 때마다 새 문서가 있다고 가정합니다.

모드 및 위치에서 _id를 사용하고 있기 때문에 SQL DB에 원하지 않는 결과가 발생합니다.

모드 및 위치에서 _id의 이름을 다른 것으로 변경하면 문제가 해결됩니다.