2017-11-07 7 views
0

내 데이터베이스에 100,000 개의 주소에 대한 지오 코딩 결과를 가져와야합니다. 결과는 CSV 파일에서 사용할 수 있습니다. 동료가 mySQL을 사용하여 가져 왔습니다. 그러나 PostgreSQL과 함께 작업 중이며 가져 오기가 작동하지 않습니다. 42 열로 빈 테이블을 채우려고합니다. 두 번째 열에는 지오 코딩 API의 원시 데이터가 텍스트로 포함되어 있습니다. 후속 열은 쉼표로 구분됩니다. CSV에 나타나는 방식대로 하나의 주소 (내 데이터베이스에 한 행으로 표시되어야 함)의 예를 참조하십시오. 만들려면 분명히 : 1 열은 00012 VILLANOVA DI GUIDONIA, IT, 원시 데이터 2 열, OK와 3 열, 1 4 열, 라치오, 등으로 5 열 ..이상한 텍스트 열을 사용하여 CSV 파일을 PostgreSQL 데이터베이스로 가져 오기

가득합니다
00012 VILLANOVA DI GUIDONIA, IT,"{\ 
    \"results\" : [\ 
     {\ 
     \"address_components\" : [\ 
      {\ 
       \"long_name\" : \"Villanova\",\ 
       \"short_name\" : \"Villanova\",\ 
       \"types\" : [ \"locality\", \"political\" ]\ 
      },\ 
      {\ 
       \"long_name\" : \"Guidonia\",\ 
       \"short_name\" : \"Guidonia\",\ 
       \"types\" : [ \"administrative_area_level_3\", \"political\" ]\ 
      },\ 
      {\ 
       \"long_name\" : \"Città Metropolitana di Roma\",\ 
       \"short_name\" : \"RM\",\ 
       \"types\" : [ \"administrative_area_level_2\", \"political\"  ]\ 
      },\ 
      {\ 
       \"long_name\" : \"Lazio\",\ 
       \"short_name\" : \"Lazio\",\ 
       \"types\" : [ \"administrative_area_level_1\", \"political\"  ]\ 
      },\ 
      {\ 
       \"long_name\" : \"Italy\",\ 
       \"short_name\" : \"IT\",\ 
       \"types\" : [ \"country\", \"political\" ]\ 
      },\ 
      {\ 
       \"long_name\" : \"00012\",\ 
       \"short_name\" : \"00012\",\ 
       \"types\" : [ \"postal_code\" ]\ 
      }\ 
     ],\ 
     \"formatted_address\" : \"00012 Villanova RM, Italy\",\ 
     \"geometry\" : {\ 
      \"bounds\" : {\ 
       \"northeast\" : {\ 
        \"lat\" : 41.9732526,\ 
        \"lng\" : 12.7654465\ 
       },\ 
       \"southwest\" : {\ 
        \"lat\" : 41.9560237,\ 
        \"lng\" : 12.745568\ 
       }\ 
      },\ 
      \"location\" : {\ 
       \"lat\" : 41.96298669999999,\ 
       \"lng\" : 12.7566109\ 
      },\ 
      \"location_type\" : \"APPROXIMATE\",\ 
      \"viewport\" : {\ 
       \"northeast\" : {\ 
        \"lat\" : 41.9732526,\ 
        \"lng\" : 12.7654465\ 
       },\ 
       \"southwest\" : {\ 
        \"lat\" : 41.9560237,\ 
        \"lng\" : 12.745568\ 
       }\ 
      }\ 
      },\ 
      \"place_id\" : \"ChIJQbO9a615LxMRMpoTF6_GZ2I\",\ 
     \"types\" : [ \"locality\", \"political\" ]\ 
     }\ 
    ],\ 
    \"status\" : \"OK\"\ 
}\ 
,OK",1,"Lazio","Città Metropolitana di Roma","Guidonia",\N,\N,\N,"Italy"\N,\N,"Villanova",\N,\N,\N,\N,\N,"00012",\N,\N,\N,\N,\N,\N,\N,\N,\N,\N,\N,\N,\N,\N,\N,41.962986,12.756611,"locality","locality, political",3148330,"00012 Villanova RM, Italy","2017-10-30 17:28:40" 

나는 PostgreSQL csv import from a MySQL csv export?

에서 힌트를 사용

\COPY addresses_googleresponse from 'myfile.csv' with delimiter AS ',' NULL AS '\\N' ESCAPE E'\\' CSV 
을 시도했다 열 "numresults"에 대한 누락 된 데이터를

I :

- : -> 오류> 오류가 종료되지 않은 CSV 인용 필드 힌트를 사용

unterminated CSV quoted field in Postgres에서, 나는

\COPY addresses_googleresponse from 'myfile.csv' with delimiter AS ',' NULL AS '\\N' ESCAPE E'\\' quote E'\b' CSV 

시도 이 형식의 두 번째 열과 관련된 잠재적 문제를 확인하십시오. \ copy (그리고 전처리없이)로 가져 오는 방법에 대한 아이디어는 환영 할 만하다. (copy는 사용할 수없고 \ copy 만 사용할 수있다.)

+0

나는'\ copy' 여러 줄 레코드를 처리 할 수 ​​있다고 생각하지 않습니다. 해당 데이터를 가져 오기 위해서는 다른 도구가 필요합니다. 동료가 사용한 도구를 아십니까? –

+0

CVS 파일에있는 \ r \ n을 제거하면 문제가 해결 될 수 있다고 생각합니다. 행 하나에 행이 있어야합니다. –

답변

0

CSV 파일이 올바르지 않습니다. 오른쪽

파일은

00012 VILLANOVA DI GUIDONIA, IT,"{\ 

로 시작하고 첫 번째 필드가 00012 VILLANOVA DI GUIDONIA, IT되고 싶어?

그러나 첫 번째 쉼표가 필드의 일부인 반면 두 번째 쉼표는 필드를 구분하는 방법이 없습니다.

주소를 따옴표로 묶어야합니다.

마찬가지로, 세 번째 필드로 사용하려는 ,OK",은 실제로 여러 줄 데이터 필드의 끝입니다.이 필드는 해당 필드를 구분하는 따옴표 안에 있기 때문에 실제로는 여러 줄 데이터 필드의 끝입니다.

따옴표를 바꿀 수있는 한 여러 줄로 된 데이터는 문제가되지 않습니다.

0

우리는이 문제를 해결했습니다. 사람들은 intereseted, 다음과 같은 코드가 작동합니다 :