Metatron-discovery: Enhance validation for local file ingestion

Created on 10 Dec 2018  ยท  18Comments  ยท  Source: metatron-app/metatron-discovery

Is your feature request related to a problem? Please describe.
๋กœ์ปฌ (csv / excel) ํŒŒ์ผ ๋กœ๋“œ์‹œ ์ ์žฌ ๊ฐ€/๋ถ€ ์—ฌ๋ถ€์— ๋Œ€ํ•œ ์œ ํšจ์„ฑ ์ฒดํฌ์— ๋Œ€ํ•ด ๋ณด์™„์„ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

Describe the solution you'd like

ํŒŒ์ผ์„ ์—…๋กœ๋“œ ํ›„ Preview ํ™”๋ฉด ๋‚ด ์—์„œ ํ•ด๋‹น CSV, ์‹œํŠธ๊ฐ€ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋‹ค๋ฉด ๊ฒฝ๊ณ  ์•„์ด์ฝ˜/๋ฌธ๊ตฌ๊ฐ€ ๋…ธ์ถœ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๊ฒฝ๊ณ  ๋ฌธ๊ตฌ ์ƒํ™ฉ์€ ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. (MT-31)

  1. Head ์ปฌ๋Ÿผ์— ๋ณ‘ํ•ฉ๋œ cell์ด ์žˆ๋Š” ๊ฒฝ์šฐ: (Excel)
    The first row contains merged cells. The new row is used as the head column.
  2. ์ค‘๋ณต ์ปฌ๋Ÿผ๋ช…: (Excel, CSV)
    Duplicate column name not available.
  3. ๊ธด ์ปฌ๋Ÿผ๋ช…: (Excel, CSV)
    Column names are allowed up to 50 characters.
  4. ๋นˆ(๊ณต๋ฐฑ) ์ปฌ๋Ÿผ: (Excel, CSV)
    Empty column name is not allowed.

CSV ํŒŒ์ผ ๋กœ๋“œ์‹œ, (MT-33)

  • ์œ ํšจํ•˜๋“  ์œ ํšจํ•˜์ง€ ์•Š๋˜ Line separator, Column delimiter์— ์„ค์ •๊ฐ’์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋Š” ๋ฏธ๋ฆฌ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Line separator, Column delimiter์— ์„ค์ •๊ฐ’์„ ์ž…๋ ฅํ–ˆ์„ ๊ฒฝ์šฐ (๊ณต๋ฐฑ๋ฌธ์ž์—ด ํฌํ•จ)

    • ๋‘ ๊ฐ’์ด ๋ชจ๋‘ ์œ ํšจํ•  ๊ฒฝ์šฐ : ๋ฐ์ดํ„ฐ๊ฐ€ ํ•ด๋‹น ์„ค์ •์— ๋”ฐ๋ผ ๋ฏธ๋ฆฌ๋ณผ ์ˆ˜ ์žˆ์œผ๋ฉฐ 'Next'๋ฒ„ํŠผ ํ™œ์„ฑํ™”

    • ํ•œ ๊ฐ’์ด๋ผ๋„ ์œ ํšจํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ : ๋ฐ์ดํ„ฐ๊ฐ€ ํ•ด๋‹น์„ค์ •์— ๋”ฐ๋ผ ๋ฏธ๋ฆฌ๋ณผ ์ˆ˜ ์žˆ์œผ๋˜ ์œ ํšจํ•˜์ง€ ์•Š์•„ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ถˆ๋ ค์ง€์ง€ ์•Š์Œ. 'Next'๋ฒ„ํŠผ ๋น„ํ™œ์„ฑํ™”

  • Line separator, Column delimiter์— ๋‘˜ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์„ค์ •๊ฐ’์„ ์•„๋ฌด๊ฒƒ๋„ ์ž…๋ ฅํ•˜์ง€ ์•Š์€ empty์ƒํƒœ (placeholder๊ฐ€ ๋…ธ์ถœ๋œ ์ƒํƒœ)

    • 'Next'๋ฒ„ํŠผ ๋น„ํ™œ์„ฑํ™”

    • ํ•ด๋‹น input์ฐฝ์— ๊ฒฝ๊ณ  ํ‘œ์‹œ

    • ์ด ์ƒํƒœ์—์„œ [v]๋ฒ„ํŠผ ํด๋ฆญ์‹œ ๊ธฐ๋ณธ๊ฐ’์ด ์ž๋™ ์ž…๋ ฅ๋จ

Describe alternatives you've considered

  • ์ถ”๊ฐ€์ ์œผ๋กœ ๋Œ€์šฉ๋Ÿ‰ ํŒŒ์ผ ๋กœ๋“œ์ผ ๊ฒฝ์šฐ๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์ง€ ์•Š๊ณ  ์ฒ˜์Œ๋ถ€ํ„ฐ ํŠน์ • ๋ผ์ธ๋งŒ ์ฝ์–ด ๋“ค์—ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๋กœ์ง์„ ๋ณ€๊ฒฝํ•˜๋Š”๊ฒƒ๋„ ๊ณ ๋ คํ•ฉ๋‹ˆ๋‹ค.

Additional context

  • ์ฐธ๊ณ  ๊ธฐํš์„œ ํ™”๋ฉด
    image
enhancement @datasource awaiting feedback

Most helpful comment

@brandon-wonjune
๋„ค ๋งž์Šต๋‹ˆ๋‹ค. ์•ž์„œ ์–ธ๊ธ‰๋“œ๋ฆฐ ๋Œ€๋กœ ๋ฆฌํ„ด๋˜๋„๋ก
sheet๋ช… ์กฐํšŒ api ๋ฐ”๊ฟ”์„œ ๋ธŒ๋žœ์น˜์— ๋ฐ˜์˜ํ•ด๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋˜๋Š” ๋ถ€๋ถ„ ๋˜๋Š” ์ถ”๊ฐ€๊ฐ€ ํ•„์š”ํ•œ ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ๋ง์”€ํ•ด์ฃผ์„ธ์š”~

All 18 comments

@kyungtaak
ํ˜„์žฌ ๋ฏธ๋ฆฌ๋ณด๊ธฐ์˜ ๊ฒฝ์šฐ๋Š” ์„œ๋ฒ„์—์„œ ๋‚ด๋ ค์ฃผ๋Š”๊ฒƒ์„ ๋ฟŒ๋ ค์ฃผ๊ณ ์žˆ๋Š”๋ฐ์š”.
์•„๋ž˜์˜ ์ผ€์ด์Šค์— ๋Œ€ํ•œ result๋Š” ์–ด๋–ค ํ˜•ํƒœ๋กœ ๋‚ด๋ ค์˜ค๋‚˜์š”?

Head ์ปฌ๋Ÿผ์— ๋ณ‘ํ•ฉ๋œ cell์ด ์žˆ๋Š” ๊ฒฝ์šฐ: (Excel)
The first row contains merged cells. The new row is used as the head column.
์ค‘๋ณต ์ปฌ๋Ÿผ๋ช…: (Excel, CSV)
Duplicate column name not available.
๊ธด ์ปฌ๋Ÿผ๋ช…: (Excel, CSV)
Column names are allowed up to 50 characters.
๋นˆ(๊ณต๋ฐฑ) ์ปฌ๋Ÿผ: (Excel, CSV)
Empty column name is not allowed.

@brandon-wonjune

{
  "fields": [{...}],
  "data": [{...}],
  "totalRows": 2,
  "isParsable": {
    "warning": "FV002",
    "valid": false
  }
}

Response์— isParsable ๊ฐ’์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
isParsable.warning ๊ฐ’์„ ํ†ตํ•ด ๊ฒฝ๊ณ ๋ฌธ๊ตฌ๋ฅผ ๊ตฌ๋ถ„ํ•ด์ฃผ์‹œ๋ฉด ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ฝ”๋“œ ๋งคํ•‘์€ ์•„๋ž˜์™€ ๊ฐ™์ด ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
FV002 : ๋ณ‘ํ•ฉ๋œ ์ปฌ๋Ÿผ (Excel)
FV003 : ์ค‘๋ณต ์ปฌ๋Ÿผ (Excel, CSV)
FV004 : ๊ธด ์ปฌ๋Ÿผ (Excel, CSV)
FV005 : ๋นˆ ์ปฌ๋Ÿผ (Excel, CSV)
+(์ถ”๊ฐ€) FV001 : ํ—ค๋” ์ˆ˜์™€ ๋กœ์šฐ ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ (์ผ๋ฐ˜์ ์ธ ๊ฒฝ๊ณ )

์„œ๋ฒ„๋‹จ ๋กœ์ง์ด ์ ์šฉ๋œ ๋ธŒ๋žœ์น˜๋Š” f#1057-enhance_ingest_validation ์ž…๋‹ˆ๋‹ค.

๋ฉ”์„ธ์ง€ ๋‹ค๊ตญ์–ด๋ฅผ UI๋‹จ์—์„œ ์ฒ˜๋ฆฌํ•˜๊ณ  ์žˆ์–ด์„œ ์œ„์™€ ๊ฐ™์ด ์ฝ”๋“œ๊ฐ’์„ ๋ฆฌํ„ดํ•˜๊ฒŒ ํ–ˆ๋Š”๋ฐ์š”,
ํ˜น์‹œ ๋” ํ•„์š”ํ•˜์‹  ๋‚ด์šฉ ์žˆ๋‹ค๋ฉด ๋ง์”€ํ•ด์ฃผ์„ธ์š”~

@alchan-lee
Q1. ๊ธด ์ปฌ๋Ÿผ์€ warning์— FV004๊ฐ€ ์ „๋‹ฌ๋˜๋Š”๊ฒƒ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ๋ฐ ๋‚˜๋จธ์ง€ 002,003,005๋Š” ์ „๋‹ฌ๋˜์ง€ ์•Š๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
2018-12-19 4 22 48
2018-12-19 4 22 57
2018-12-19 4 23 25
์•„๋ž˜ ํŒŒ์ผ์€ ํ…Œ์ŠคํŠธ ํ•œ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.
แ„‡แ…งแ†ผแ„’แ…กแ†ธ1.xlsx
แ„‡แ…ตแ†ซ.xlsx
แ„Œแ…ฎแ†ผแ„‡แ…ฉแ†จ.xlsx
FV001์€ FV005์™€ ์–ด๋–ค ์ฐจ์ด๊ฐ€ ์žˆ๋‚˜์š”?

Q2. ๊ทธ๋ฆฌ๊ณ  ๊ธฐ์กด์˜ ๋กœ์ง์€ ๋ชจ๋“  ์‹œํŠธ๋ฅผ ์กฐํšŒํ•˜์ง€ ์•Š๊ณ  ์„ ํƒํ•œ ์‹œํŠธ๋งŒ ์กฐํšŒํ•˜๋Š” api๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. (์—‘์…€ํŒŒ์ผ์˜ ๊ฒฝ์šฐ)
api/datasources/file/{fileName}/data?limit=100&firstHeaderRow=true&sheet=%EC%8B%9C%ED%8A%B81
๊ทธ๋Ÿฐ๋ฐ ๋ณ€๊ฒฝ๋œ ๊ธฐํš์„ ํ™•์ธํ•ด๋ณด๋ฉด ์ดˆ๊ธฐ์— ํŒŒ์ผ์„ ์—…๋กœ๋“œ์‹œ ์œ„์ฒ˜๋Ÿผ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ์ปฌ๋Ÿผ์ด ์กด์žฌํ•˜๋Š” ์‹œํŠธ๋งˆ๋‹ค ์—๋Ÿฌ ์•„์ด์ฝ˜์„ ํ‘œ์‹œํ•ด ์ค˜์•ผ๋ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿด๊ฒฝ์šฐ ๊ธฐ์กด api๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด sheet์˜ ๊ฐฏ์ˆ˜ ๋งŒํผ api ์กฐํšŒ๋ฅผ ์š”์ฒญํ•ด์„œ ui์— ํ‘œ์‹œํ•ด์ฃผ๋ฉด ๋˜๋Š”๊ฑด์ง€, ์•„๋‹ˆ๋ฉด ์ƒˆ๋กœ api ๋ณ€๊ฒฝ์ด ์žˆ์„ ์˜ˆ์ •์ธ๊ฐ€์š”?

@brandon-wonjune
ํ™•์ธ์ด ๋Šฆ์–ด์ง„์  ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.

์šฐ์„  Q1์—์„œ ๋ฌธ์˜์ฃผ์‹  ๊ฒฐํ•จ์€ ๋ณ€๊ฒฝํ•ด์„œ ๋ฐ˜์˜ํ•ด๋‘์—ˆ์Šต๋‹ˆ๋‹ค (f#1057-enhance_ingest_validation ๋ธŒ๋žœ์น˜)

Q2์—์„œ ๋ฌธ์˜์ฃผ์‹  ๋‚ด์šฉ์€ sheet ๊ฐฏ์ˆ˜๋งŒํผ api ํ˜ธ์ถœ์€ ๋‚ญ๋น„์ ์ด๊ณ ,
๋ณ„๋„์˜ api๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ๋ณด๋‹ค๋Š” upload api์—์„œ sheet๋ช… ๋ฆฌํ„ด์‹œ์— ์•„๋ž˜์™€ ๊ฐ™์€ object๋กœ ๋ฆฌํ„ด๋“œ๋ฆฌ๋ ค๊ณ  ํ•˜๋Š”๋ฐ์š”,

์ด๋ ‡๊ฒŒ ์ง„ํ–‰ํ•ด๋„ ๊ดœ์ฐฎ์œผ์‹ค๊นŒ์š”?
(๊ธฐ์กด์—๋Š” String ๋ฆฌ์ŠคํŠธ๋กœ ์‹œํŠธ๋ช…๋งŒ ๋ฆฌํ„ดํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค)

{
  "sheets": {
    "์‹œํŠธ1": {
      "warning": "FV002",
      "valid": false
    },
    "์‹œํŠธ2": {
      "valid": true
    }
  }
}

@alchan-lee
๋„ค, ๊ทธ๋Ÿฌ๋ฉด ๋ณ€๊ฒฝ๋  api๋Š” ์•„๋ž˜์˜ ํ˜•ํƒœ๋กœ ์ž‘๋™ํ•˜๊ฒŒ ๋˜๋‚˜์š”?

์ดˆ๊ธฐ ํ™”๋ฉด ์ง„์ž… > file ์—…๋กœ๋“œ > api ์กฐํšŒ > ์‹œํŠธ๋ณ„ error ๋ฐ warning ์ƒํƒœ ํ™•์ธ > ์‹œํŠธ ์„ ํƒ > ์‹œํŠธ ์ƒ์„ธ๋ฐ์ดํ„ฐ ์กฐํšŒ api

@brandon-wonjune
๋„ค ๋งž์Šต๋‹ˆ๋‹ค. ์•ž์„œ ์–ธ๊ธ‰๋“œ๋ฆฐ ๋Œ€๋กœ ๋ฆฌํ„ด๋˜๋„๋ก
sheet๋ช… ์กฐํšŒ api ๋ฐ”๊ฟ”์„œ ๋ธŒ๋žœ์น˜์— ๋ฐ˜์˜ํ•ด๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ๋˜๋Š” ๋ถ€๋ถ„ ๋˜๋Š” ์ถ”๊ฐ€๊ฐ€ ํ•„์š”ํ•œ ๋ถ€๋ถ„์ด ์žˆ๋‹ค๋ฉด ๋ง์”€ํ•ด์ฃผ์„ธ์š”~

@alchan-lee
์กฐํšŒ ํ…Œ์ŠคํŠธ ์ค‘ ์งˆ๋ฌธ ๋“œ๋ฆฝ๋‹ˆ๋‹ค.
์ดˆ๊ธฐ์— ํŒŒ์ผ ์—…๋กœ๋“œ์‹œ ๋‚ด๋ ค์˜ค๋Š” ์ •๋ณด ์ค‘ 'sheets'๊ฐ€ ์žˆ๋Š”๋ฐ์š”
๋น„์–ด์žˆ๊ฑฐ๋‚˜ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š” ์‹œํŠธ๊ฐ€ ํ‘œ๊ธฐ๋˜์ง€ ์•Š๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

// api
api/datasources/file/upload

// result
filePath: "/var/folders/08/8nxc3vnd2h75n7h060z4mzm80000gn/T//TEMP_FILE_e659d66e-e95d-4e90-bb98-ad415f08d3c8.xlsx"
filekey: "TEMP_FILE_e659d66e-e95d-4e90-bb98-ad415f08d3c8.xlsx"
sheets: ["Sheet1", "Sheet2", "Sheet3", "Sheet4"]

ํ˜„์žฌ๋Š” ์œ„์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ๋‚ด๋ ค์˜ค๋Š”๋ฐ์š”.
์œ„ api๊ฐ€ ๋งž๋‚˜์š”?

@brandon-wonjune
์•„๋ž˜ ์ฒ˜๋Ÿผ object๋กœ ๋ฆฌํ„ด๋˜๊ฒŒ ๋ณ€๊ฒฝํ•ด๋‘”๊ฑด๋ฐ์š”.. ใ…Žใ…Ž

๋ง์”€ํ•˜์‹  result ๊ฐ’์— sheets๊ฐ€ List ํ˜•ํƒœ๋กœ ๋‚ด๋ ค์˜ค๋Š” ๊ฒƒ์€ ์˜ˆ์ „ ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

f#1057-enhance_ingest_validation ๋ธŒ๋žœ์น˜๋ฅผ pull ๋ฐ›์•„ ๋ณด์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

{
  "sheets": {
    "Sheet1": {
      "warning": "FV002",
      "valid": false
    },
    "Sheet2": {
      "valid": true
    },
    "์‹œํŠธ1": {
      "warning": "FV005",
      "valid": false
    }
  },
  "filePath": "/var/folders/rx/h_xkznq92gv26b8x72hy0stw0000gn/T//TEMP_FILE_0dc9c331-027f-4acd-a8ae-559b70e46a2d.xlsx",
  "filekey": "TEMP_FILE_0dc9c331-027f-4acd-a8ae-559b70e46a2d.xlsx"
}

@kyungtaak @AnnieHwang @brandon-wonjune
์ฒ˜์Œ์— ์ด ์ด์Šˆ๊ฐ€ ์ถœ๋ฐœํ•œ ๊ฒƒ์€ MT-31์ธ๋ฐ์š”
๋ณ‘ํ•ฉ๋œ ์ปฌ๋Ÿผ์„ ๋น„๋กฏํ•ด ์œ ์ €๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ์‹ค์ˆ˜ํ•˜๋Š” ์‚ฌํ•ญ(๊ณต๋ฐฑ, ์ค‘๋ณต ๋“ฑ)์— ๋Œ€ํ•ด ๊ฒฝ๊ณ ๋ฅผ ์ฃผ๋„๋ก ๊ธฐํšํ•˜์˜€์Šต๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ๋ณธ ํ™”๋ฉด์—์„œ ์‹œํŠธ ์ˆ˜๋‚˜ ์ปฌ๋Ÿผ ์ˆ˜๊ฐ€ ๋งŽ์„ ๊ฒฝ์šฐ ์ด์— ๋Œ€ํ•œ ์œ ํšจ๊ฐ’ ์ฒดํฌ๋ฅผ ํ•˜๋Š” ๊ณผ์ •์—์„œ ํผํฌ๋จผ์Šค ์ €ํ•˜๊ฐ€ ์ผ์–ด๋‚  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.

๋”๋ถˆ์–ด ํ˜„์žฌ ์ด ๋‹ค์Œ ์Šคํ…์—์„œ ์ค‘๋ณต ์ปฌ๋Ÿผ๋ช…์„ ๋น„๋กฏํ•œ ์ปฌ๋Ÿผ๋ช… ์ž์ฒด๋ฅผ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ๋Š” ์ด์Šˆ#1202๊ฐ€ ๋“ฑ๋ก๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋•Œ๋ฌธ์— ๋ณธ ํ™”๋ฉด์—์„œ๋Š” 1๋ฒˆ์˜ ๋ณ‘ํ•ฉ ์ปฌ๋Ÿผ๋งŒ ์ฒดํฌํ•˜๊ณ  2,3,4๋ฒˆ์˜ ์ปฌ๋Ÿผ๋ช… validation ์ฒดํฌ๋Š” #1202์ด์Šˆ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ configure the schema๋‹จ๊ณ„์—์„œ ์ง„ํ–‰ํ•˜๋ฉด ์–ด๋–จ๊นŒ ํ•ฉ๋‹ˆ๋‹ค.
์™œ๋ƒ๋ฉด ์ด ํ™”๋ฉด์—์„œ 1์ฐจ์ ์œผ๋กœ ์ปฌ๋Ÿผ๋ช… ์œ ํšจ์„ฑ ์ฒดํฌ๋ฅผ ํ•˜๊ณ  ๋„˜์–ด์˜จ๋‹ค ํ•ด๋„ configure the schema๋‹จ๊ณ„์—์„œ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ปฌ๋Ÿผ ์œ ํšจ์„ฑ์„ ์ฒดํฌํ•ด์•ผ ํ•˜๊ธฐ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ค‘๋ณต ์ปฌ๋Ÿผ์— ๋Œ€ํ•œ ์ด์Šˆ๋Š” #1175์—๋„ ๋“ฑ๋ก๋˜์–ด ์žˆ๋Š”๋ฐ์š”
configure the schema๋‹จ๊ณ„์—์„œ ๊ฐ™์€ ๋ฃฐ๋กœ validation์„ ์ฒดํฌํ•˜๋ฉด ์ข‹์„ ๋“ฏ ํ•ฉ๋‹ˆ๋‹ค.

A. ์“ธ ์ˆ˜ ์—†๋Š” ์ปฌ๋Ÿผ๋ช…์ด ์žˆ์„ ๊ฒฝ์šฐ
a-1. 1์ž ์ด์ƒ์˜ ํŠน์ˆ˜๋ฌธ์ž ํฌํ•จ ASCII ๋ฌธ์ž(์ˆซ์ž ๋˜๋Š” ์˜๋ฌธ ๋˜๋Š” ํ•œ๊ธ€) ํ—ˆ์šฉ
a-2. ํŠน์ˆ˜๋ฌธ์ž๋กœ๋งŒ ์ด๋ค„์ง„ ๋ฌธ์ž์—ด ๋ถˆ๊ฐ€ (์˜ˆ !!@@##)
a-3. Unicode ๋ถˆ๊ฐ€
๋ฌธ๊ตฌ: Column name contains an invalid character.
์ปฌ๋Ÿผ๋ช…์— ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ž์—ด์ด ์žˆ์Šต๋‹ˆ๋‹ค.

B. ์ค‘๋ณต ์ปฌ๋Ÿผ๋ช…์ผ ๊ฒฝ์šฐ
b-1. ๋™์ผํ•œ ๋ฌธ์ž์—ด์˜ ์ปฌ๋Ÿผ๋ช… ๋ถˆ๊ฐ€
b-2. ๋Œ€/์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ์•ˆํ•จ (์˜ˆ Name, name์€ ๋™์ผ ๋ฌธ์ž์—ด ์ทจ๊ธ‰)
๋ฌธ๊ตฌ: Duplicate column name not available.
๋™์ผํ•œ ์ปฌ๋Ÿผ๋ช…์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

C. ๊ธด ์ปฌ๋Ÿผ๋ช…
c-1. 1์ž ์ด์ƒ 50์ž ๋ฏธ๋งŒ์˜ ๋ฌธ์ž์—ด ํ—ˆ์šฉ
๋ฌธ๊ตฌ: Column names are allowed up to 50 characters.
1์ž~50์ž ์ด๋‚ด์˜ ์ปฌ๋Ÿผ๋ช…์œผ๋กœ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”

D. ๋นˆ(๊ณต๋ฐฑ) ์ปฌ๋Ÿผ
d-1. ๊ณต๋ฐฑ(null), ๋นˆ ๋ฌธ์ž์—ด (&nbsp) ๋ถˆ๊ฐ€
๋ฌธ๊ตฌ: Empty column name is not allowed.
๋นˆ ์ปฌ๋Ÿผ๋ช…์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@deidera08 @alchan-lee
๋ณ€๊ฒฝ๋œ api ํ™•์ธํ•˜์˜€์Šต๋‹ˆ๋‹ค.
ํ•œ๊ฐ€์ง€ ๋ฌธ์˜์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
๋งŒ์•ฝ sheet ์— ์•„๋ฌด๊ฒƒ๋„ ์—†๋Š” ๊ฒฝ์šฐ๋Š” ์•„์˜ˆ sheets ๋‚ด๋ถ€์— ํ‘œ์‹œ๊ฐ€ ๋˜๊ณ  ์žˆ์ง€ ์•Š๋Š”๋ฐ์š”.
์ด๋Ÿฌํ•œ ์ผ€์ด์Šค์—๋„ ๋ณ„๋„๋กœ ui์—์„œ ํ‘œ์‹œ๊ฐ€ ํ•„์š”ํ•œ์ง€ ๋ฌธ์˜๋“œ๋ฆฝ๋‹ˆ๋‹ค.
์•„๋ž˜๋Š” ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ๋Š” ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.
Sheet2๊ฐ€ ํ•ด๋‹น ์ผ€์ด์Šค์ž…๋‹ˆ๋‹ค.
default.xlsx
2019-01-25 1 09 09

@alchan-lee
๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜ api์กฐํšŒ์‹œ firstHeaderRow: false ํŒŒ๋ผ๋ฉ”ํ„ฐ๊ฐ€ ์žˆ๋Š”๊ฒฝ์šฐ isParsable์ด ๋„˜์–ด์˜ค๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
CSVํŒŒ์ผ๊ณผ xlxsํŒŒ์ผ ๋‘˜๋‹ค ๋™์ผํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๊ณ ์žˆ์Šต๋‹ˆ๋‹ค.

@kyungtaak @alchan-lee ๊ธฐํš์ž๋ถ„ ๋ง์ฒ˜๋Ÿผ ํ•ด๋‹น ์ด์Šˆ์—์„œ ๋ณ‘ํ•ฉ๋œ ์…€๋งŒ ์ฒดํฌํ•˜๊ณ  #1175์—์„œ ๋ฒจ๋ฆฌ๋ฐ์ด์…˜ ์ฒ˜๋ฆฌ๋ฅผ ๋ฌถ์–ด์„œ ์ง„ํ–‰ํ•˜๋ฉด ๋ ๊ฒƒ ๊ฐ™์•„์š”.

๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜ api์กฐํšŒ์‹œ firstHeaderRow: false ํŒŒ๋ผ๋ฉ”ํ„ฐ๊ฐ€ ์žˆ๋Š”๊ฒฝ์šฐ isParsable์ด ๋„˜์–ด์˜ค๊ณ  ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
CSVํŒŒ์ผ๊ณผ xlxsํŒŒ์ผ ๋‘˜๋‹ค ๋™์ผํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๊ณ ์žˆ์Šต๋‹ˆ๋‹ค.

@brandon-wonjune
์ด ๋ถ€๋ถ„์€ firstHeaderRow: false์ผ๋•Œ๋Š” ํ—ค๋”๋ฅผ ๋‚ด๋ถ€์ ์œผ๋กœ ๋งŒ๋“ค๊ณ  ์žˆ์–ด์„œ ๋ณ„๋„๋กœ validation์„ ์•ˆํ•˜๋‹ค ๋ณด๋‹ˆ
isParsable์ด ๋น ์ ธ ์žˆ์—ˆ๋„ค์š”.

์ผ๊ด€์„ฑ์ด ์žˆ์–ด์•ผ ํ•  ๋“ฏ ํ•˜๋‹ˆ isParsable์„ true๋กœ ๋‚ด๋ ค์˜ค๋„๋ก ๋ฐ˜์˜ํ•ด๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

@AnnieHwang @deidera08 @brandon-wonjune @kyungtaak
๊ทธ๋Ÿผ ์ด ๋‹จ๊ณ„์—์„œ๋Š” ์„œ๋ฒ„๋‹จ์—์„œ ๋ณ‘ํ•ฉ๋œ ์…€์ด ์žˆ๋Š”์ง€๋งŒ ํ™•์ธํ•˜๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

100 ์ปฌ๋Ÿผ์งœ๋ฆฌ๋กœ ํ…Œ์ŠคํŠธ ํ•ด๋ดค์„๋•Œ ์„ฑ๋Šฅ์ƒ ์ข€ ์ฐจ์ด๊ฐ€ ๋‚˜๊ธด ํ•˜๋„ค์š”.

  • ์ „์ฒด validation : 794 (ms)
  • ๋ณ‘ํ•ฉ๋งŒ validation : 77 (ms)
  • no validation : 26 (ms)

@alchan-lee
๋”ฐ๋กœ ์„œ๋ฒ„์ชฝ์—์„œ ๋ณ‘ํ•ฉ๋œ ์…€ ์ด์™ธ์˜ ์ƒํ™ฉ์— ๋Œ€ํ•ด valid๋ฅผ true๋กœ ๋‚ด๋ ค์ฃผ์‹ค๊ฑด๊ฐ€์š”?
์•„๋‹ˆ๋ฉด UI์—์„œ ๋ณ‘ํ•ฉ๋œ ์…€ (FV002)๋งŒ ๋‹ค์Œ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋„๋ก ํ•˜๋ฉด๋˜๋‚˜์š”?

@brandon-wonjune
๋„ค, ์ฒซ๋ฒˆ์งธ ๋ง์”€ํ•˜์‹ ๋Œ€๋กœ ์„œ๋ฒ„์ชฝ์—์„œ ๋ณ‘ํ•ฉ๋œ ์…€์„ ๋นผ๊ณ ๋Š” valid๋ฅผ true๋กœ ๋‚ด๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

@deidera08 @AnnieHwang @brandon-wonjune
CSV ํŒŒ์ผ ์—…๋กœ๋“œ ์‹œ์— header์— null ๊ฐ’์ด ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ ํฌ๋ฆฌํ‹ฐ์ปฌํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ด์„œ
์•„์˜ˆ ํŒŒ์ผ์„ ์˜ฌ๋ฆด ์ˆ˜๊ฐ€ ์—†๊ฒŒ ๋˜๋Š”๋ฐ์š”,

์ด ๊ฒฝ์šฐ์—๋Š” ํŒŒ์ผ ์—…๋กœ๋“œ๋ฅผ ํ•˜๋Š” ๋‹จ๊ณ„์—์„œ validation์ด ๊ผญ ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚จ๊ฒจ๋‘๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
(์ฒดํฌ๋ฅผ ๊ผญ ํ•ด์•ผํ•˜๋Š”๋ฐ notification์„ ๋บ„ ์ด์œ ๋Š” ์—†์„ ๊ฒƒ ๊ฐ™์•„์„œ์š”)

์ตœ์ข…์ ์œผ๋กœ ์ด ์ด์Šˆ์—์„œ ์ง„ํ–‰๋˜๊ณ  ์žˆ๋Š” ํŒŒ์ผ์„ ์—…๋กœ๋“œํ•˜๋Š” ์‹œ์ ์—์„œ validation์€

  • csv์ธ ๊ฒฝ์šฐ : null ๊ฐ’ ์ฒดํฌ (๋ณ‘ํ•ฉ ๊ฐœ๋…์ด ์—†์Œ)
  • excel์ธ ๊ฒฝ์šฐ : ๋ณ‘ํ•ฉ ์ฒดํฌ

๋‘๊ฐ€์ง€๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

@alchan-lee
์ ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
์•„๋ž˜์™€ ๊ฐ™์ด ๋‚˜ํƒ€๋‚˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • CSV์ธ ๊ฒฝ์šฐ
    2019-01-29 11 20 40
    2019-01-29 11 20 44

  • excel์ธ ๊ฒฝ์šฐ
    2019-01-29 11 20 31

Was this page helpful?
0 / 5 - 0 ratings