콘솔을 사용하여 테이블 데이터 삽입

NoSQL 콘솔에서 Oracle NoSQL Database Cloud Service 테이블에 데이터를 삽입하는 방법을 알아봅니다.

NoSQL 콘솔을 사용하면 다음 모드에서 Oracle NoSQL Database Cloud Service 테이블에 새 행을 삽입할 수 있습니다.
  1. 단순 입력 모드: 이 모드를 사용하여 새 행에 대한 값을 선언적으로 제공할 수 있습니다.
  2. 고급 JSON 입력 모드: 이 모드를 사용하여 JSON 형식의 새 행에 대한 값을 제공할 수 있습니다.
  3. INSERT 문을 사용하여 행을 추가할 수 있습니다. NoSQL>>테이블에서 행을 추가할 테이블을 선택합니다. 데이터 탐색에서 SQL 문에 대해 제공된 텍스트 상자에 INSERT 문을 추가하고 명령을 실행합니다.
  4. 브라우저를 통해 로컬 파일에서 테이블로 데이터를 대량 업로드할 수도 있습니다.

주: 테이블이 전역 활성 테이블인 경우 한 영역에 데이터를 추가하면 모든 지역 테이블 복제본에도 데이터가 추가됩니다.

테이블에 데이터 삽입: 단순 입력 모드

단순 입력 삽입 모드를 사용하여 Oracle NoSQL Database Cloud Service 테이블에 데이터를 삽입하는 방법을 알아봅니다.

테이블에 데이터를 삽입하려면
  1. 인프라 콘솔에서 NoSQL 콘솔에 액세스합니다. 인프라 콘솔에서 서비스 액세스를 참조하십시오.
  2. NoSQL 콘솔에는 테넌시의 모든 테이블이 나열됩니다. 테이블 세부정보를 보려면 다음 중 하나를 수행합니다.
    • 테이블 이름 또는
    • 테이블 이름에 해당하는 작업 메뉴를 누르고 세부정보 보기를 선택합니다.
    Table Details 페이지가 열립니다.
  3. 행 삽입을 누릅니다.
  4. 행 삽입 창에서 입력 모드에 대해 단순 입력을 선택합니다.
  5. 테이블의 모든 열이 나열됩니다. 테이블의 열에 대한 데이터를 입력합니다. Binary와 같은 일부 열 유형의 경우 데이터를 업로드합니다.

    주:

    테이블의 Null을 허용하지 않는 모든 열에는 값을 입력해야 합니다.
  6. 행 삽입을 누릅니다.
    레코드가 테이블에 삽입됩니다.
현재 페이지에 대한 도움말을 보려면 페이지 상단에 있는 도움말 링크를 누르십시오.

테이블에 데이터 삽입: 고급 JSON 입력 모드

고급 JSON 입력 모드를 사용하여 Oracle NoSQL Database Cloud Service 테이블에 데이터를 삽입하는 방법을 알아봅니다.

테이블에 데이터를 삽입하려면
  1. 인프라 콘솔에서 NoSQL 콘솔에 액세스합니다. 인프라 콘솔에서 서비스 액세스를 참조하십시오.
  2. NoSQL 콘솔에는 테넌시의 모든 테이블이 나열됩니다. 테이블 세부정보를 보려면 다음 중 하나를 수행합니다.
    • 테이블 이름 또는
    • 테이블 이름에 해당하는 작업 메뉴를 누르고 세부정보 보기를 선택합니다.
    Table Details 페이지가 열립니다.
  3. 행 삽입을 누릅니다.
  4. 레코드 삽입 창에서 입력 모드에 대해 고급 JSON 입력을 선택합니다.
  5. 레코드 정의를 JSON 형식으로 붙여넣거나 업로드합니다.
  6. 행 삽입을 누릅니다.
    레코드가 테이블에 삽입됩니다.
현재 페이지에 대한 도움말을 보려면 페이지 상단에 있는 도움말 링크를 누르십시오.

SQL 명령을 사용하여 데이터 삽입

INSERT 문은 새 행을 생성하여 지정된 테이블에 추가하는 데 사용됩니다.

테이블 이름 뒤에 선택적 열을 지정할 수 있습니다. 이 목록에는 테이블 열의 하위 집합에 대한 열 이름이 포함됩니다. 부분 집합에는 모든 기본 키 열이 포함되어야 합니다. 열 리스트가 없으면 기본 열 리스트가 테이블의 모든 열을 순서대로 포함하는 리스트가 CREATE TABLE 문에 지정됩니다.

열 리스트의 열은 VALUES 절 다음에 나열된 표현식(또는 DEFAULT 키워드)과 일대일로 일치합니다. 표현식/DEFAULT 수가 열 수와 동일하지 않으면 오류가 발생합니다. 이러한 표현식/DEFAULT는 새 행에서 연관된 열의 값을 계산합니다. 표현식이 두 개 이상의 항목을 반환하면 오류가 발생합니다. 표현식이 결과를 반환하지 않으면 NULL이 해당 표현식의 결과로 사용됩니다. 표현식 대신 DEFAULT 키워드가 VALUES 목록에 나타나면 연관된 열의 기본값이 새 행에서 해당 열의 값으로 사용됩니다. 또한 열 리스트의 열 수가 테이블의 총 열 수보다 적은 경우 누락된 열에도 기본값이 사용됩니다.

예 1: 모든 열 값을 제공하는 BaggageInfo 테이블에 행 삽입:
INSERT INTO BaggageInfo VALUES(
1762392196147,
"Birgit Naquin",
"M",
"165-742-5715",
"QD1L0T",
[ {
    "id" : "7903989918469",
    "tagNum" : "17657806240229",
    "routing" : "JFK/MAD",
    "lastActionCode" : "OFFLOAD",
    "lastActionDesc" : "OFFLOAD",
    "lastSeenStation" : "MAD",
    "flightLegs" : [ {
      "flightNo" : "BM495",
      "flightDate" : "2019-03-07T07:00:00Z",
      "fltRouteSrc" : "JFK",
      "fltRouteDest" : "MAD",
      "estimatedArrival" : "2019-03-07T14:00:00Z",
      "actions" : [ {
        "actionAt" : "MAD",
        "actionCode" : "Offload to Carousel at MAD",
        "actionTime" : "2019-03-07T13:54:00Z"
      }, {
        "actionAt" : "JFK",
        "actionCode" : "ONLOAD to MAD",
        "actionTime" : "2019-03-07T07:00:00Z"
      }, {
        "actionAt" : "JFK",
        "actionCode" : "BagTag Scan at JFK",
        "actionTime" : "2019-03-07T06:53:00Z"
      }, {
        "actionAt" : "JFK",
        "actionCode" : "Checkin at JFK",
        "actionTime" : "2019-03-07T05:03:00Z"
      } ]
    } ],
    "lastSeenTimeGmt" : "2019-03-07T13:51:00Z",
    "bagArrivalDate" : "2019-03-07T13:51:00Z"
  } ]
)

예 2: DEFAULT 절을 지정하여 INSERT 문을 수행하는 동안 일부 데이터를 건너뜁니다.

"DEFAULT"를 지정하여 일부 열의 데이터를 건너뛸 수 있습니다.
INSERT INTO BaggageInfo VALUES(
1762397286805,
"Bonnie Williams",
DEFAULT,
DEFAULT,
"CZ1O5I",
[ {
    "id" : "79039899129693",
    "tagNum" : "17657806216554",
    "routing" : "SFO/ORD/FRA",
    "lastActionCode" : "OFFLOAD",
    "lastActionDesc" : "OFFLOAD",
    "lastSeenStation" : "FRA",
    "flightLegs" : [ {
      "flightNo" : "BM572",
      "flightDate" : "2019-03-02T05:00:00Z",
      "fltRouteSrc" : "SFO",
      "fltRouteDest" : "ORD",
      "estimatedArrival" : "2019-03-02T09:00:00Z",
      "actions" : [ {
        "actionAt" : "SFO",
        "actionCode" : "ONLOAD to ORD",
        "actionTime" : "2019-03-02T05:24:00Z"
      }, {
        "actionAt" : "SFO",
        "actionCode" : "BagTag Scan at SFO",
        "actionTime" : "2019-03-02T04:52:00Z"
      }, {
        "actionAt" : "SFO",
        "actionCode" : "Checkin at SFO",
        "actionTime" : "2019-03-02T03:28:00Z"
      } ]
    }, {
      "flightNo" : "BM582",
      "flightDate" : "2019-03-02T05:24:00Z",
      "fltRouteSrc" : "ORD",
      "fltRouteDest" : "FRA",
      "estimatedArrival" : "2019-03-02T13:24:00Z",
      "actions" : [ {
        "actionAt" : "FRA",
        "actionCode" : "Offload to Carousel at FRA",
        "actionTime" : "2019-03-02T13:20:00Z"
      }, {
        "actionAt" : "ORD",
        "actionCode" : "ONLOAD to FRA",
        "actionTime" : "2019-03-02T12:54:00Z"
      }, {
        "actionAt" : "ORD",
        "actionCode" : "OFFLOAD from ORD",
        "actionTime" : "2019-03-02T12:30:00Z"
      } ]
    } ],
    "lastSeenTimeGmt" : "2019-03-02T13:18:00Z",
    "bagArrivalDate" : "2019-03-02T13:18:00Z"
  } ]
)

예 3: insert 문에서 열 이름 지정 및 건너뛰기

테이블의 일부 열에만 데이터가 있는 경우 INSERT 절에 열 이름을 지정한 다음 "VALUES" 절에 해당 값을 지정할 수 있습니다.
INSERT INTO BaggageInfo(ticketNo, fullName,confNo,bagInfo) VALUES(
1762355349471,
"Bryant Weber",
"LI7N1W",
[ {
    "id" : "79039899149056",
    "tagNum" : "17657806234185",
    "routing" : "MEL/LAX/MIA",
    "lastActionCode" : "OFFLOAD",
    "lastActionDesc" : "OFFLOAD",
    "lastSeenStation" : "MIA",
    "flightLegs" : [ {
      "flightNo" : "BM114",
      "flightDate" : "2019-03-01T12:00:00Z",
      "fltRouteSrc" : "MEL",
      "fltRouteDest" : "LAX",
      "estimatedArrival" : "2019-03-02T02:00:00Z",
      "actions" : [ {
        "actionAt" : "MEL",
        "actionCode" : "ONLOAD to LAX",
        "actionTime" : "2019-03-01T12:20:00Z"
      }, {
        "actionAt" : "MEL",
        "actionCode" : "BagTag Scan at MEL",
        "actionTime" : "2019-03-01T11:52:00Z"
      }, {
        "actionAt" : "MEL",
        "actionCode" : "Checkin at MEL",
        "actionTime" : "2019-03-01T11:43:00Z"
      } ]
    }, {
      "flightNo" : "BM866",
      "flightDate" : "2019-03-01T12:20:00Z",
      "fltRouteSrc" : "LAX",
      "fltRouteDest" : "MIA",
      "estimatedArrival" : "2019-03-02T16:21:00Z",
      "actions" : [ {
        "actionAt" : "MIA",
        "actionCode" : "Offload to Carousel at MIA",
        "actionTime" : "2019-03-02T16:18:00Z"
      }, {
        "actionAt" : "LAX",
        "actionCode" : "ONLOAD to MIA",
        "actionTime" : "2019-03-02T16:12:00Z"
      }, {
        "actionAt" : "LAX",
        "actionCode" : "OFFLOAD from LAX",
        "actionTime" : "2019-03-02T16:02:00Z"
      } ]
    } ],
    "lastSeenTimeGmt" : "2019-03-02T16:09:00Z",
    "bagArrivalDate" : "2019-03-02T16:09:00Z"
  } ]
)
예제 4: 모든 열 값을 제공하는 stream_acct 테이블에 행 삽입:
INSERT INTO stream_acct VALUES(
1,
"AP",
"2023-10-18",
{
   "firstName": "Adam",
   "lastName": "Phillips",
   "country": "Germany",
   "contentStreamed": [{
      "showName": "At the Ranch",
      "showId": 26,
      "showtype": "tvseries",
      "genres": ["action", "crime", "spanish"],
      "numSeasons": 4,
      "seriesInfo": [{
         "seasonNum": 1,
         "numEpisodes": 2,
         "episodes": [{
            "episodeID": 20,
            "episodeName": "Season 1 episode 1",
            "lengthMin": 85,
            "minWatched": 85,
            "date": "2022-04-18"
         },
         {
            "episodeID": 30,
            "lengthMin": 60,
            "episodeName": "Season 1 episode 2",
            "minWatched": 60,
            "date": "2022 - 04 - 18 "
         }]
      },
      {
         "seasonNum": 2,
         "numEpisodes": 2,
         "episodes": [{
            "episodeID": 40,
            "episodeName": "Season 2 episode 1",
            "lengthMin": 50,
            "minWatched": 50,
            "date": "2022-04-25"
         },
         {
            "episodeID": 50,
            "episodeName": "Season 2 episode 2",
            "lengthMin": 45,
            "minWatched": 30,
            "date": "2022-04-27"
         }]
      },
      {
         "seasonNum": 3,
         "numEpisodes": 2,
         "episodes": [{
            "episodeID": 60,
            "episodeName": "Season 3 episode 1",
            "lengthMin": 50,
            "minWatched": 50,
            "date": "2022-04-25"
         },
         {
            "episodeID": 70,
            "episodeName": "Season 3 episode 2",
            "lengthMin": 45,
            "minWatched": 30,
            "date": "2022 - 04 - 27 "
         }]
      }]
   },
   {
      "showName": "Bienvenu",
      "showId": 15,
      "showtype": "tvseries",
      "genres": ["comedy", "french"],
      "numSeasons": 2,
      "seriesInfo": [{
         "seasonNum": 1,
         "numEpisodes": 2,
         "episodes": [{
            "episodeID": 20,
            "episodeName": "Bonjour",
            "lengthMin": 45,
            "minWatched": 45,
            "date": "2022-03-07"
         },
         {
            "episodeID": 30,
            "episodeName": "Merci",
            "lengthMin": 42,
            "minWatched": 42,
            "date": "2022-03-08"
         }]
      }]
   }]
});

테이블 행 업로드

[테이블 세부정보] 페이지의 데이터 업로드 단추를 사용하면 브라우저를 통해 로컬 파일에서 테이블로 데이터를 대량 업로드할 수 있습니다.

업로드 기능은 수천 개 미만의 행을 로드하기 위한 것입니다. 이 기능은 개념 증명(POC)을 수행하거나 서비스의 기본 테스트를 수행하는 데 유용합니다. 작은 테이블을 채우는 편리한 방법입니다. 수만 개의 행을 작성하려는 경우 성능상의 이유로 Oracle NoSQL Database Migrator를 사용하거나 NoSQL SDK 중 하나를 사용하여 자체 프로그램을 작성하는 것이 좋습니다. 그러나 몇 백 개 또는 몇 천 개의 행을 빠르게 삽입하려는 경우 이 업로드 방법은 신속한 방법입니다.

업로드할 파일에는 일련의 JSON 객체가 포함되어야 합니다. 객체는 단일 배열의 쉼표로 구분된 항목으로 표현되거나 중괄호로 묶인 단순 객체 시퀀스로 표현될 수 있으며 이들 사이에 구문 구분자가 없습니다. 각 객체의 콘텐츠 형식이 JSON으로 올바르게 지정되어야 하며 업로드될 테이블의 스키마를 준수해야 합니다.

예: 다음 DDL 문을 사용하여 테이블이 생성됩니다.
CREATE TABLE Simple ( id integer, val string, PRIMARY KEY ( id ) )
다음 예에서는 파일 컨텐츠에 배열 형식을 사용하는 방법을 보여 줍니다.

[
  {
    "id": 0,
    "val": "0"
  },
  {
    "id": 1,
    "val": "2"
  }, ...
]
다음 예에서는 파일 컨텐츠에 단순 객체를 사용하는 방법을 보여 줍니다.

{
  "id": 0,
  "val": "0"
}
{
  "id": 1,
  "val": "2"
}, ...
  • 테이블의 스키마에 열 값이 필요하지 않은 경우 해당 JSON 속성이 제거될 수 있습니다.
  • 열 값이 GENERATED ALWAYS인 경우 해당 JSON 속성을 비워 두어야 합니다.
  • JSON 객체에 열 이름과 일치하지 않는 이름의 등록 정보가 포함된 경우 해당 등록 정보는 무시됩니다.

업로드 기능을 사용하려면 데이터 업로드 단추를 누르고 업로드할 파일을 선택합니다. 업로드가 즉시 시작되고 진행률이 페이지에 표시됩니다. 성공적으로 완료되면 삽입된 총 행 수가 표시됩니다. 업로드 정지 단추를 눌러 업로드를 중단할 수 있습니다. 데이터베이스에 성공적으로 커밋된 행 수가 표시됩니다.

입력 파일에서 오류가 감지되면 업로드가 중지되고 대략적인 행 번호가 포함된 오류 메시지가 표시됩니다. 잘못된 JSON 구문 또는 스키마 부적합으로 인해 입력 오류가 발생할 수 있습니다. 서비스에 대한 요청 중에도 오류가 발생할 수 있습니다. 이러한 오류로 인해 업로드가 중지되고 메시지가 표시됩니다.

다음 스키마를 사용하는 예제 테이블을 살펴보십시오.
CREATE TABLE IF NOT EXISTS NDCStable (id INTEGER, name STRING, email STRING, age INTEGER, income DOUBLE, PRIMARY KEY(SHARD(id)))
다음 표에는 입력 파일의 몇 가지 일반적인 오류와 데이터 업로드 중 해당하는 오류 처리가 나열되어 있습니다.

테이블 - 업로드 중 오류 처리

입력 파일의 문제 오류 처리
행 중 하나에 비JSON 텍스트가 있습니다.
{"id":1,"name":"Jane Smith","email":"iamjane@somemail.co.us","age":30,"income":30000.0}
missed a line
{"id":2,"name":"Adam Smith","email":"adam.smith@mymail.com","age":25,"income":25000.0}

시스템에서 텍스트를 무시하고 업로드를 계속합니다. 성공 메시지는 모든 행이 테이블로 성공적으로 로드된 후에 표시됩니다.

이 예제에서는 "missed a line" 텍스트를 건너뛰고 id 1과 2를 가진 두 행이 성공적으로 로드됩니다.

중복된 기본 키 항목
{"id":2,"name":"Adam Smith","email":"adam.smith@mymail.com","age":25,"income":25000.0}
{"id":2,"name":"Jennifer Smith","email":"jenny1_smith@mymail.com","age":35,"income":35000.0}
{"id":5,"name":"Noelle Smith","email":"noel21@somemail.co.us","age":40,"income":40000.0}

시스템에서 중복된 행 항목을 건너뛰고 업로드를 계속합니다. 모든 행을 성공적으로 로드하면 성공 메시지가 표시됩니다.

이 예제에서는 ID가 2인 첫번째 행이 테이블로 로드됩니다. 중복된 ID 값 2를 포함하는 두번째 행은 건너뜁니다. 다른 모든 행이 성공적으로 업로드되었습니다.

부정확한 JSON 형식
{"id":7,"name":"Tom Smith","email":"reachtom12@mymail.com","age":65,"income":65000.0}
{"id":8,"name":"Jack Smith","email":"iamjacksmi@somemail.co.us","age":60,"income":30000.0
{"id":9,"fame":"Jane Smith""email":"iamjanesmi@somemail.co.us","age":56,"income":35000.0}

오류가 있는 행이 감지되면 시스템에서 업로드를 정지합니다. 예상치 않은 파일 끝과 대략적인 행 번호를 나타내는 오류 메시지가 표시됩니다.

이 예에서는 두 개의 JSON 형식 오류가 있습니다. ID가 8인 행에 닫는 중괄호가 누락되었으며 ID 9에 두 JSON 필드 사이의 쉼표가 누락되었습니다. 이 두 항목이 JSON 데이터 유형 형식을 준수하지 않아 업로드가 실패합니다. ID가 7인 행만 테이블에 성공적으로 로드됩니다.

주:

입력 파일에서 첫 번째 오류 인스턴스 또는 불일치가 감지되면 업로드 작업이 중지됩니다.
행에 기본 키가 누락되었습니다.
{"id":2,"name":"Adam Smith","email":"adam.smith@mymail.com","age":25,"income":25000.0}
{"name":"Jennifer Smith","email":"jenny1_smith@mymail.com","age":35,"income":35000.0}
{"id":5,"name":"Noelle Smith","email":"noel21@somemail.co.us","age":40,"income":40000.0}

오류가 있는 행이 감지되면 시스템에서 업로드를 정지합니다. 기본 키에 값이 있어야 함을 나타내는 오류 메시지가 표시됩니다.

이 예제에서 두번째 행에는 오류가 발생한 primary key 필드가 포함되지 않습니다. ID가 2인 행만 테이블에 성공적으로 로드됩니다.

스키마 부적합 - 누락, 부정확 또는 추가 필드
{"id":6,"name":"Yera Smith","email":"ys1982@mymail.com","age":55,"income":55000.0}
{"id":7,"fname":"Tom Smith","email":"reachtom12@mymail.com","age":65,"income":65000.0}
{"id":8,"email":"iamjacksmi@somemail.co.us","age":60,"income":30000.0}

입력 파일에서 기본 키 이외의 필드가 누락된 경우 데이터가 성공적으로 업로드됩니다. 성공 메시지가 표시됩니다. 누락된 필드는 null 값으로 채워집니다.

이 예에서는 ID가 7인 행에서 필드 이름의 철자가 잘못되었으며 ID가 8인 행에서 name 필드가 누락되었습니다. 이 두 경우 모두 모든 행이 성공적으로 테이블에 로드됩니다. name 필드는 null 값으로 업데이트됩니다.

어떤 이유로든 중간에 업로드가 중지된 경우 다음 중 하나를 수행할 수 있습니다.
  • 생성된 키 값이 있는 열이 없는 경우(즉, 키가 JSON 파일에 의해 완전히 지정된 경우) 동일한 파일로 다시 시작할 수 있습니다. 이미 작성된 행이 다시 기록됩니다.
  • 생성된 키 값이 있는 경우 처음부터 다시 시작하면 기존 레코드를 덮어쓰는 대신 새 레코드가 작성됩니다. 가장 쉬운 경로는 테이블을 삭제한 후 다시 생성하는 것입니다.
  • 또는 데이터 탐색 양식에서 DELETE FROM tablename 문을 실행하여 테이블에서 모든 레코드를 제거할 수 있습니다.

업로드 프로세스 중 프로비저닝된 쓰기 한도를 초과하면 임시 메시지가 표시되고 다시 한 번 한도를 초과하지 않도록 업로드 속도가 느려집니다.