Доброе время суток,
возникла нужда импортировать GEO данные]
http://download.geonames.org/export/dump/ из UTF8 текстовика с разделителями табуляцией в табличку (ссылку на GEO zip привел выше, формат таблички в которую портирую привожу ниже как и импорт скрипт генерируемый IBExpert)
неважно какой txt файл пытаюсь импортировать (напр из AZ.zip AZ.txt) IBExpert умирает навсегда, по крайней мере на сутки . Приходится прибивать весь IB Expert задачу через таск менеджер. Умирает ещё в момент когда пытается показать превью данных.
Если эту же табличку конвертирую в Excel 2003 то импорт проходит.
Исходный текстовик судя по доке в UTF8, текстовые поля с интернациональными символами я тоже сделал в UTF8 дабы не возникало коллизий.
В результате танцев выяснилось что причиной всему символ конца строки в текстовике (надо было выставить LF).
Хорошо бы в будующем предусмотреть какой то контроль, дабы не возникало вечного зависания в такой ситуации. Пока разобрался убил 2 часа.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
/******************************************************************************/
/**** Generated by IBExpert 15.10.2015 16:33:16 ****/
/******************************************************************************/
/******************************************************************************/
/**** Following SET SQL DIALECT is just for the Database Comparer ****/
/******************************************************************************/
SET SQL DIALECT 3;
/******************************************************************************/
/**** Tables ****/
/******************************************************************************/
CREATE TABLE GEONAME (
GEONAMEID INTEGER NOT NULL,
NAME VARCHAR(200) CHARACTER SET UTF8,
ASCIINAME VARCHAR(200) CHARACTER SET ASCII,
ALTERNATENAMES VARCHAR(8000) CHARACTER SET UTF8,
LATITUDE DECIMAL(15,5),
LONGITUDE DECIMAL(15,5),
FEATURE_CLASS CHAR(1) CHARACTER SET ASCII,
FEATURE_CODE VARCHAR(10) CHARACTER SET ASCII,
COUNTRY_CODE CHAR(2) CHARACTER SET ASCII,
CC2 VARCHAR(200) CHARACTER SET ASCII,
ADMIN1_CODE VARCHAR(20) CHARACTER SET ASCII,
ADMIN2_CODE VARCHAR(80) CHARACTER SET ASCII,
ADMIN3_CODE VARCHAR(20) CHARACTER SET ASCII,
ADMIN4_CODE VARCHAR(20) CHARACTER SET ASCII,
POPULATION BIGINT,
ELEVATION INTEGER,
DEM INTEGER,
TIMEZONE VARCHAR(40) CHARACTER SET ASCII,
MODIFICATION_DATE DATE
);
/******************************************************************************/
/**** Primary keys ****/
/******************************************************************************/
ALTER TABLE GEONAME ADD CONSTRAINT PK_GEONAME PRIMARY KEY (GEONAMEID);
/******************************************************************************/
/**** Fields descriptions ****/
/******************************************************************************/
COMMENT ON COLUMN GEONAME.NAME IS
'name of geographical point';
COMMENT ON COLUMN GEONAME.ASCIINAME IS
'name of geographical point in plain ascii characters';
COMMENT ON COLUMN GEONAME.ALTERNATENAMES IS
'alternatenames, comma separated, ascii names automatically transliterated, convenience attribute from alternatename table';
COMMENT ON COLUMN GEONAME.LATITUDE IS
'latitude in decimal degrees (wgs84)';
COMMENT ON COLUMN GEONAME.LONGITUDE IS
'longitude in decimal degrees (wgs84)';
COMMENT ON COLUMN GEONAME.FEATURE_CLASS IS
'see http://www.geonames.org/export/codes.html';
COMMENT ON COLUMN GEONAME.FEATURE_CODE IS
'see http://www.geonames.org/export/codes.html';
COMMENT ON COLUMN GEONAME.COUNTRY_CODE IS
'ISO-3166 2-letter country code';
COMMENT ON COLUMN GEONAME.CC2 IS
'alternate country codes, comma separated, ISO-3166 2-letter country code';
COMMENT ON COLUMN GEONAME.ADMIN1_CODE IS
'fipscode (subject to change to iso code), see exceptions below, see file admin1Codes.txt for display names of this code';
COMMENT ON COLUMN GEONAME.ADMIN2_CODE IS
'code for the second administrative division, a county in the US, see file admin2Codes.txt';
COMMENT ON COLUMN GEONAME.ADMIN3_CODE IS
'code for third level administrative division';
COMMENT ON COLUMN GEONAME.ADMIN4_CODE IS
'code for fourth level administrative division';
COMMENT ON COLUMN GEONAME.ELEVATION IS
'in meters';
COMMENT ON COLUMN GEONAME.DEM IS
'digital elevation model, srtm3 or gtopo30, average elevation of 3''''x3'''' (ca 90mx90m) or 30''''x30'''' (ca 900mx900m) area in meters, integer. srtm processed by cgiar/ciat';
COMMENT ON COLUMN GEONAME.TIMEZONE IS
'the timezone id (see file timeZone.txt)';
COMMENT ON COLUMN GEONAME.MODIFICATION_DATE IS
'date of last modification in yyyy-MM-dd format';
/******************************************************************************/
/**** Privileges ****/
/******************************************************************************/
Скрипт который генерирует для импорта IB Expert и приводит к зависанию выглядит так
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
execute ibeblock
as
begin
cbb = 'execute ibeblock (RecCount variant)
as
begin
if (ibec_Mod(RecCount, 100) = 0) then
ibec_Progress(RecCount || '' records imported.'');
end;';
DB = ibec_CreateConnection(__ctFirebird, 'DBName="127.0.0.1/3052:D:\MTG\MTG_DB\GEO.FDB";
ClientLib=C:\Program Files (x86)\Firebird-2.5.2.26540-0_Win32\bin\fbclient.dll;
User=SYSDBA; Password=******; Names=UTF8; SqlDialect=3;');
try
ibec_UseConnection(DB);
Res = ibec_ImportData(DB, 'GEONAME', __impText, '', '',
'RowFirst=1; RowLast=2147483647;
DateOrder=YMD; DateSeparator="-"; TimeSeparator=":"; DecimalSeparator=".";
CSVDelimiter=TAB; StringQualifier=NONE; RecordSeparator=CRLF;', '', cbb);
if (Res is not null) then
ibec_ShowMessage(Res || ' records were imported successfully.');
finally
ibec_CloseConnection(DB);
end;
end
скрипт который работает
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
execute ibeblock
as
begin
cbb = 'execute ibeblock (RecCount variant)
as
begin
if (ibec_Mod(RecCount, 100) = 0) then
ibec_Progress(RecCount || '' records imported.'');
end;';
DB = ibec_CreateConnection(__ctFirebird, 'DBName="127.0.0.1/3052:D:\MTG\MTG_DB\GEO.FDB";
ClientLib=C:\Program Files (x86)\Firebird-2.5.2.26540-0_Win32\bin\fbclient.dll;
User=SYSDBA; Password=******; Names=UTF8; SqlDialect=3;');
try
ibec_UseConnection(DB);
Res = ibec_ImportData(DB, 'GEONAME', __impText, 'C:\_Lands\AZ\AZ.txt', '',
'RowFirst=1; RowLast=2147483647;
DateOrder=YMD; DateSeparator="-"; TimeSeparator=":"; DecimalSeparator=".";
CSVDelimiter=TAB; StringQualifier=NONE; RecordSeparator=LF;', '', cbb);
if (Res is not null) then
ibec_ShowMessage(Res || ' records were imported successfully.');
finally
ibec_CloseConnection(DB);
end;
end