2016-09-14 45 views
0

我已成功導入一些JSON數據到雲中,JSON數據有三個級別。然後從cloudant創建dashdb倉庫,將數據放入關係表中。看來,dashdb爲JSON數據中的每個級別創建了三個表,但沒有爲我提供一個返回頂級的Key。有沒有一個定製可以告訴dashdb如何加入表格。 樣品JSON文檔是下面: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用於dashdb創建的三個表表示各表的所有字段是在這裏。請注意,我沒有看到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,那麼它是否有效? –

+0

這似乎是問題,已經用id替換了所有_id。現在dashdb表看起來更好。 – binway

回答

0

Cloudant使用_​​id作爲每個文檔的UID。倉儲任務似乎迭代這些文檔,並假定每次看到新的_id時都有一個新文檔。

由於您在模式和位置​​中使用_id,這會在SQL DB中產生不希望的結果。

將模式和位置​​中的_id重命名爲其他內容可以解決問題。