로드 ========================================= IRIS는 외부 시스템에서 대량의 벌크 데이터를 한꺼번에 IRIS에 로드할 수 있는 기능을 제공합니다. 일반 INSERT 쿼리는 레코드단위로 데이터를 저장하기 때문에 대량의 INSERT 쿼리가 동시에 유입될 경우, 시스템 성능이 저하될 수 있습니다. 그러나 IRIS에서 제공하는 벌크 데이터 로드 기능은 벌크 데이터 파일에 저장된 데이터를 한꺼번에 로드하므로, 동일한 양의 데이터를 IRIS에 저장하는 경우, 일반 INSERT 쿼리에 비하여 데이터 저장 속도를 최대 수십 배 향상시킬 수 있습니다. 벌크 데이터는 데이터 파일과 제어 파일의 쌍으로 구성 됩니다. 각 파일은 특정 규칙으로 생성이 되며 본 장에서는 벌크 데이터를 생성하는 방법에 대해서 설명 합니다. 벌크 데이터를 로드 하는 방법은 각 API마다 상이하므로 API문서를 참고 하시기 바랍니다. 데이터 파일 생성하기 ----------------------------------------- 데이터 파일은 IRIS에 로드할 실제 데이터가 저장된 파일입니다. 아래는 사용자가 생성한 데이터 파일의 예입니다. 하나의 행, 즉 하나의 레코드는 ‘|’ 필드 구분자로 구분된 6개의 필드로 구성되어 있습니다. .. code:: SEOUL|GANGNAM01|SS0001|20161228080000|53|-65 SEOUL|GANGNAM01|SS0002|20161228080000|70|-70 SEOUL|GANGNAM01|YS0001|20161228080000|103|-64 SEOUL|GANGNAM01|SP0001|20161228080300|2|-30 SEOUL|GANGNAM01|CD0001|20161228080700|60|-50 ... 데이터 파일 작성 시, 사용자가 준수하여야 할 규정은 다음과 같습니다. #. 데이터 파일의 각 레코드는 ‘\n’ 등 레코드 구분자(record separator)로 구분합니다. #. 각 레코드를 구성하는 필드는 ‘|’, ‘,’ 등의 필드 구분자(field separator)로 구분합니다. #. 동일한 데이터 파일 내에 저장된 데이터는 모두 동일한 partitionkey를 가집니다. 위의 예에서는 두 번째 컬럼인 ‘GANGNAM01’이 partitionkey를 나타냅니다. #. 동일한 데이터 파일 내에 저장된 데이터는 동일한 partitiondate 범위에 속합니다. 위의 예에서는 네 번째 컬럼인 날짜 값이 partitiondate를 나타냅니다. 제어 파일 ----------------------------------------- 제어파일은 데이터 파일에 저장된 실제 데이터의 각 필드와 해당 테이블의 컬럼명에 대한 1:1 대응 관계를 나타냅니다. 즉, 데이터 파일에서 각 필드값이 테이블의 어떤 컬럼에 저장되는지를 정의하는 것입니다. 상기의 데이터 파일을 지정된 테이블에 로드하게 되면, 첫 번째 필드인 SEOUL은 CITY 컬럼에 저장되며, 두 번째 컬럼인 GANGNAM01은 DISTRICT 컬럼에 저장됩니다. 아래의 첫 번째 예는 레코드 구분자가 ‘\n’인 경우의 제어 파일을 작성한 예입니다. 즉, 각 컬럼명을 ‘\n’으로 구분합니다. 만일, 레코드 구분자가 ‘,’인 경우, 아래 2번째 예와 같이 각 컬럼명을 ‘,’로 구분하여 작성합니다. - 레코드 구분자: '\\n'인 경우 .. code:: CITY DISTRICT BLOCK DATE PARAM01 PARAM02 - 레코드 구분자가 ','인 경우 .. code:: CITY,DISTRICT,BLOCK,DATE,PARAM01,PARAM02 위의 방법은 데이터를 그대로 로드하는 작업을 진행합니다. 만약 데이터 로드시 특정 함수를 적용하기를 원한다면 컬럼 이름 다음에 필드 구분자를 이용해 함수를 적어주면 됩니다. 이때 함수의 컬럼 명을 적어주는 부분에는 ? 를 적어주면 됩니다. ? 만 사용할 경우 어떠한 함수도 사용하지 않는 다는 것을 의미합니다. - 레코드 구분자: \\n, 필드 구분자: , 일 경우 .. code:: CITY,? DISTRICT,? BLOCK,? DATE,? PARAM01,to_int(?, null) PARAM02,to_int(?, null) SELECT시 사용하는 대부분의 함수를 지원하지만, SUM, MIN, MAX등 aggreage함수는 지원히지 않습니다. 또한 데이터 로드시에만 사용되는 함수가 존재합니다. .. table:: 로드 타입 변환 함수 ====================== === 함수 설명 ? | 데이터를 그대로 저장 합니다. | 이 경우 모든 데이터는 문자로 취급 됩니다. to_text(?, null) | 공백 문자가 들어올 경우 null로 변경 합니다. to_int(?, null) | 컬럼을 정수형으로 변경합니다. | 공백 문자가 들어올 경우 null로 변경을 합니다. | 변경이 불가능한 데이터가 들어올 경우 로드에 실패합니다. to_int(?, null, 0) | 컬럼을 정수형으로 변경합니다. | 공백 문자가 들어올 경우 null로 변경을 합니다. | 변경이 불가능한 데이터가 들어올 경우 0으로 저장 됩니다. to_real(?, null) | 컬럼을 실수형으로 변경합니다. | 공백 문자가 들어올 경우 null로 변경을 합니다. | 변경이 불가능한 데이터가 들어올 경우 로드에 실패합니다. to_real(?, null, 0.0) | 컬럼을 실수형으로 변경합니다. | 공백 문자가 들어올 경우 null로 변경을 합니다. | 변경이 불가능한 데이터가 들어올 경우 0.0으로 저장 됩니다. ====================== === iplus에서 벌크 데이터 로드하기 ----------------------------------------- iplus에서 벌크 데이터를 로드하는 방법은 다음과 같습니다. 데이터를 IRIS에 insert하는 측에서는 각각의 레코드와 필드가 특정 구분자(separator) (예를 들어, 레코드 구분자: \n, 필드 구분자: \|)로 구분된 대량의 레코드들을 데이터 파일에 저장한 후, partitionkey, partitiondate 및 파일 경로를 인자로 하여 iplus에서 제공하는 .load 명령어를 사용하여 해당 데이터를 한꺼번에 IRIS에 insert할 수 있습니다. 이때, .load 명령어를 실행하기 전에, 먼저 .record_sep 명령어와 .field_sep 명령어를 사용하여 레코드와 필드의 구분자를 지정합니다. 아래는 iplus에서 .load 명령어의 사용 방법을 보여줍니다. .. code:: iplus> .record_sep \n iplus> .field_sep | iplus> .load

: table name : partitionkey

: partitiondate : control file path : data file path API를 이용한 벌크 데이터 로드하기 ----------------------------------------- API를 이용하여 벌크 데이터를 로드하는 방법은 API에 따라 상이하므로, 각 API문서를 참고하시기 바랍니다.