Skip to content

Latest commit

 

History

History
306 lines (273 loc) · 21.4 KB

API.md

File metadata and controls

306 lines (273 loc) · 21.4 KB

Profiler API Specification

- 요청 메시지 명세

항목명(영문)항목명(국문)항목
구분
샘플데이터항목설명2차년도
지원여부
source객체 경로1-프로파일링 대상 객체 정보 (local file path, URL, database connection 중 하나)O
url원격 파일경로에 대한 URL0http://qufa.com/sample.csv프로파일링 대상 파일의 URL 경로.
원격 파일일 경우 "http://" + 파일 url 로컬 파일일 경우 "file:///" + 파일 경로
O
db데이터베이스 및 테이블 연결 정보0-프로파일링 대상이 데이터베이스 테이블일 경우 연결 및 테이블 정보
* 'db'와 하위 파라미터는 2022년 지원 예정
databaseDBMS명종류0mysqlDBMS 이름
connconnection string0server=127.0.0.1;uid=root;pwd=12345;database=testDB 연결을 위한 connection string
table테이블명0customer프로파일링을 위한 테이블 이름
header헤더0true, falsecsv 파일 헤더에 컬럼 이름의 존재 여부를 나타내는 boolean 값(default:true)
profiles컬럼별 프로파일링 항목 정의0-프로파일 종류별 프로파일링 대상이 되는 컬럼들을 컬럼번호나 컬럼이름 리스트로 표현.
column_analysis프로파일링 대상 컬럼 리스트0-기본, 수치, 문자열, 날짜 프로파일링 컬럼 리스트.
생략될 경우 데이터 타입에 따라 가능한 프로파일링을 수행하며, 데이터 타입은 서버에서 자동으로 추정하여 실행함
(default:
 {
  basic:[모든컬럼리스트],
  number:[수치형 컬럼리스트],
  string:[문자열 컬럼리스트],
  date:[날짜형 컬럼리스트]
 }
)
basic기본 프로파일링 대상 컬럼 리스트0..n[1, 2, 3, 4] 또는 [“id”, “name”, “age”, “phone”]기본 프로파일링 대상되는 컬럼 리스트 (컬럼번호 또는 컬럼명)
number수치 프로파일링 대상 컬럼 리스트0..n[1, 2, 3, 4] 또는 [“id”, “name”, “age”, “phone”]수치 프로파일링 대상되는 컬럼 리스트 (컬럼번호 또는 컬럼명)
string문자열 프로파일링 대상 컬럼 리스트0..n[1, 2, 3, 4] 또는 [“id”, “name”, “age”, “phone”]문자열 프로파일링 대상되는 컬럼 리스트 (컬럼번호 또는 컬럼명)
date날짜 프로파일링 대상 컬럼 리스트0..n[1, 2, 3, 4] 또는 [“year”, “date”, “start_time“, ”end_time“]시간/날짜 프로파일링 대상되는 컬럼 리스트 (컬럼번호 또는 컬럼명)
key_analysiscandidate key 분석0true, false기본키가 될 수 있는 후보키 컬럼을 탐색할지의 여부 결정하는 boolean값(default:false)
dependency_analysisfunctiuonal dependency 분석을 위한 컬럼 쌍의 리스트0..n-여러개의 함수적 종속을 동시에 검사할 수 있도록 결정자와 의존자 쌍의 배열형태로 명세함. 현 버전에서는 결정자와 의존자는 단일 컬럼만 지원 (determinant->dependency 의 리스트)
determinant결정자 컬럼01, 2 또는 “id”컬럼번호 또는 컬럼명
dependency의존자 컬럼01, 2 또는 “id”컬럼번호 또는 컬럼명
fk_analysis외래키의 유효성 검증을 위한 명세 리스트0..n-현재 테이블의 컬럼과 타 테이블의 컬럼간 참조무결성의 유효성 여부를 검사. 배열 형식을 여러개의 무결성을 동시에 검사할 수 있도록 명세 지원
foreign_key외래키 후보 컬럼01, 2 또는 “id”컬럼번호 또는 컬럼명
referenced_file참조되는 원격 파일 경로에 대한 URL0http://qufa.com/sample.csv프로파일링 대상 파일의 URL 경로. 원격 파일일 경우 "http://" + 파일 url 로컬 파일일 경우 "file:///" + 파일 경로
referenced_db참조되는 데이터베이스 및 테이블 연결 정보0-프로파일링 대상이 데이터베이스 테이블일 경우 연결 및 테이블 정보
databaseDBMS명종류0mysqlDBMS 이름
connconnection string0server=127.0.0.1;uid=root;pwd=12345;database=testDB 연결을 위한 connection string
table테이블명0customer참조되는 테이블 이름
referenced_column참조되는 컬럼명01, 2 또는 “id”참조되는 컴럼명 이름
※ 항목구분 : 필수(1), 옵션(0), 1건 이상 복수건(1..n), 0건 또는 복수건(0..n)



- 응답 메시지 명세

항목명항목
구분
샘플데이터항목설명2차년도
지원여부
dataset_name0sample데이터 셋 이름(String)O
dataset_type0csv데이터 셋 타입(String)O
dataset_size0300000데이터 셋 크기(byte)O
dataset_column_cnt01데이터 셋 열 수(int)O
dataset_row_cnt0200데이터 셋 행 수(int)O
results0-profiling 결과O
column_id11열 고유 번호(int)O
column_name1score열 고유 이름(string)O
column_type1number열 타입(string)O
profiles1-프로파일 결과 목록O
basic_profile0-basic 프로파일O
row_cnt020레코드 수(int)O
distinct_cnt0120서로 구별되는 값들의 수(int)O
null_cnt00결측치 수(int)O
distinctness00.6Distinct Count/Row Count(0~1) (double)O
unique_cnt010유일한 값을 갖는 레코드 수(int)O
value_distribution0-값 분포 정보O
type   0all, top100- Value Distribution(VD) 응답 형식
- distinct count가 100 초과일 경우 type = top100
- distinct count가 100 이하일 경우 type = all
O
value   0..n{
 "45":10
},
{
 "12":9
},
{
 "10":8
},
··· ,
{
 "150":1
},
{
 "149":1
}
- 각 값의 출현 빈도(빈도수 기준 내림차순)
- type = all일 경우 모든 분포값을 출력
- type = top100일 경우 상위 100개 분포값을 출력
O
range   0..n{
 "5":19
},
{
 "19.5":31
},
··· ,
{
 "121":23
},
{
 "135.5":12
},
{
 "150":null
}
- 모든 value에 대해 값의 범위 별로 출력
- column_type=number, type=top100일 경우에만 출력
- {"5":19}, {"19.5":31}일 경우 5보다 크거나 같고 19.5보다 작은 값의 수는 19개임을 나타냄
- range는 항상 10개의 구간으로 설정
- 마지막 구간의 시작과 끝을 모두 명시하기 위해
11번째 key pair를 {"max number":null}로 설정
O
number_profile0-number 프로파일O
min05최소값(double)O
max0150최대값(double)O
sum018512총합(double)O
mean092.56평균(double)O
median078중앙값(double)O
sd021.44표준편차(double)O
variance0459.674분산(double)O
percentile_25th0421사분위 수(double)O
percentile_75th01133사분위 수(double)O
zero_cnt020의 개수(int)O
string_profile0-string 프로파일O
blank_cnt02빈칸의 수(int)O
min_len04최소 길이(int)O
max_len09최대 길이(int)O
avg_len06.2평균 길이(double)O
date_profile0-date 프로파일O
highest_date02021-07-01
12:00:00
가장 최신 시간O
lowest_date02020-07-01
12:00:00
가장 과거 시간O
mean_date02021-01-01
12:00:00
평균 시간O
median_date02021-01-01
12:00:00
중앙값을 갖는 시간O
percentile_25th02020-10-01
12:00:00
1사분위 시간O
percentile_75th02021-04-01
12:00:00
3사분위 시간O
month_distribution0{
 January:7
},
{
 February:8
},
···,
{
 December:5
}
월별 분포O
year_distribution0{
 2010:20
},
{
 2011:10
}, ···
연도별 분포O
key_analysis_results0..n[1, 3, 5] 또는 [“id”, “name”]후보키 대상이 되는 컬럼 배열 (컬럼번호 또는 컬럼명)O
dependency_analysis_results0..n-후보키 대상이 되는 컬럼 배열 (컬럼번호 또는 컬럼명)O
determinant01, 2 또는 “id”결정자(컬럼번호 또는 컬럼명)O
dependency01, 2 또는 “id”의존자(컬럼번호 또는 컬럼명)O
is_valid0true or false함수적 종속 만족여부O
invalid_values0..n[1, 4, 6]결정자 컬럼 중 함수적 종속을 위배해는 컬럼값의 배열
is_valid가 false일 경우에만 해당 값들을 배열로 명시하고, true면 생략
O
fK_analysis_results0..n-
foreign_key01, 2 또는 “id”참조하는 컬럼번호 또는 컬럼명O
referenced_table0“customer.csv” 또는 “customer”참조되는 파일명 또는 테이블명O
referenced_column0“id”참조되는 컬럼명(외부 테이블이므로 컬럼번호는 허용안함)O
is_valid0true or false참조무결성 준수여부O
invalid_values0..n[1, 4, 6]참조무결성을 위배하는(참조되는 값이 존재하지 않는) 컬럼 값들의 배열 is_valid가 false일 경우에만 해당 값들을 배열로 명시하고, true면 생략O
※ 항목구분 : 필수(1), 옵션(0), 1건 이상 복수건(1..n), 0건 또는 복수건(0..n)




  • URL
  • URL

    /profile/local

  • Method:

    POST

  • JSON Request Params

    Required:

    source:url=[string]

    Optional:

    header=[boolean]
    profiles:column_analysis:basic=[integer array]
    profiles:column_analysis:number=[integer array]
    profiles:column_analysis:string=[integer array]
    profiles:column_analysis:date=[integer array]
    profiles:key_analysis=[boolean]
    profiles:dependencied_analysis=[object]
    profiles:fk_analysis=[object]

  • Data Params

    • local file

      {
        "source": {
          "url": "file:///C:/customers.csv"
        },
        "header": true,
        "profiles": {
          "column_analysis": {
              "basic": [1, 2],
              "string": [4, 5]
          },
          "key_analysis": true,
          "dependencied_analysis":[
              {
                  "determinant":1,
                  "dependency":3
              }
          ],
          "fk_analysis":[
              {
                  "foreign_key":3,
                  "referenced_file":"file:///C:/customers.csv",
                  "referenced_column": 3
              },
                    {
                  "foreign_key": 2,
                  "referenced_file":"file:///C:/customers.csv",
                  "referenced_column":3
              }
              ]
        }
      }
    • remote file

      {
          "source": {
            "url": "http://qufa.com/sample.csv"
          }
          //param 'header', 'profiles' can use like above
      }`
      
  • Success Response:

    • Code: 200 OK
      Content:
        {
        "dataset_name": "customers",
        "dataset_type": "csv",
        "dataset_size": 693430,
        "dataset_column_cnt": 14,
        "dataset_row_cnt": 5115,
        "single_column_results": [
            {
                "column_id": 1,
                "column_name": "id",
                "column_type": "string",
                "profiles": {
                    "basic_profile": {
                        "row_cnt": 5115,
                        "distinct_cnt": 5107,
                        "null_cnt": 0,
                        "distinctness": 0.998435972629521,
                        "unique_cnt": 5100,
                        "value_distribution": {
                            "type": "top100",
                            "value": [
                                {
                                    "5091": 3
                                },
                                {
                                    "1148": 2
                                },
                                ...
                                ,
                                {
                                    "3652": 1
                                }
                            ],
                            "range": "-"
                        }
                    },
                    "string_profile": {
                        "blank_cnt": 0,
                        "min_len": 1,
                        "max_len": 4,
                        "avg_len": 3.784
                    }
                }
            }
        ],
        "key_analysis_results": [],
        "dependency_analysis_results": [
            {
                "determinant": 1,
                "dependency": 3,
                "is_valid": false,
                "invalid_values": [
                    "1148",
                    "1145",
                    "1253",
                    "1254",
                    "988",
                    "990"
                ]
            }
        ],
        "fk_analysis_results": [
            {
                "foreign_key": 3,
                "referenced_table": "customers.csv",
                "referenced_column": "family_name",
                "is_valid": false
            },
            {
                "foreign_key": 2,
                "referenced_table": "customers.csv",
                "referenced_column": "family_name",
                "is_valid": false
            }
        ]
      }

  • Error Response:

    • content: FILE_NOT_FOUND
      code: 404

    OR

    • content: BAD_JSON_REQUEST
      code: 400

    OR

    • content: REQUEST_DATA_MALFORMED
      code: 411

    OR

    • content: INTERNAL_ERROR
      code: 500
  • Notes: