当前位置: 首页 > 知识库问答 >
问题:

如何从csv文件大容量导入到sql server作为空间数据类型?

孟安民
2023-03-14

希望创建一个与空间数据类型相对应的列的sql db。

共有1个答案

何聪
2023-03-14

做了一些研究,发现了这篇文章:

将纬度/经度(晚/长)转换为地理点

因此,正如本文所述,我已经创建了表,并使用给定的脚本插入了一些测试数据:

CREATE TABLE [dbo].[Landmark] (
    [ID]                INT IDENTITY(1, 1),
    [LandmarkName]      VARCHAR(100),
    [Location]          VARCHAR(50),
    [Latitude]          FLOAT,
    [Longitude]         FLOAT
)
GO

INSERT INTO [dbo].[Landmark] ( [LandmarkName], [Location], [Latitude], [Longitude] )
VALUES ( 'Statue of Liberty', 'New York, USA', 40.689168,-74.044563 ),
       ( 'Eiffel Tower', 'Paris, France', 48.858454, 2.294694),
       ( 'Leaning Tower of Pisa', 'Pisa, Italy', 43.72294, 10.396604 ),
       ( 'Great Pyramids of Giza', 'Cairo, Egypt', 29.978989, 31.134632 ),
       ( 'Sydney Opera House', 'Syndey, Australia', -33.856651, 151.214967 ),
       ( 'Taj Mahal', 'Agra, India', 27.175047, 78.042042 ),
       ( 'Colosseum', 'Rome, Italy', 41.890178, 12.492378 )
GO
ALTER TABLE [dbo].[Landmark]
ADD [GeoLocation] AS geography::STPointFromText('POINT(' + CAST([Longitude] AS VARCHAR(20)) + ' ' + CAST([Latitude] AS VARCHAR(20)) + ')', 4326)
GO
SELECT *
FROM dbo.Landmark
Statue of Liberty| New York, USA| 40.689168|-74.044563
Eiffel Tower| Paris, France| 48.858454| 2.294694
Leaning Tower of Pisa| Pisa, Italy| 43.72294| 10.396604
Great Pyramids of Giza| Cairo, Egypt| 29.978989| 31.134632
Sydney Opera House| Syndey, Australia| -33.856651| 151.214967
Taj Mahal| Agra, India| 27.175047| 78.042042
Colosseum| Rome, Italy| 41.890178| 12.492378

因此,我使用OPENROWSET打开CSV文件,并将其格式化为行,而不是一个长字符串(不幸的是,OPENROWSET就是这样读取CSV文件的)。我使用了splitstring函数:https://stackoverflow.com/a/19935594/3680098

现在我需要把这些好友变成列,而不是一个字符串。我使用了SO上提供的答案:https://stackoverflow.com/a/15108499/3680098

总结一下,这是一个问题:

SELECT LTRIM(RTRIM(xmlValue.value('/values[1]/value[1]','nvarchar(100)'))) AS LandmarkName
    , LTRIM(RTRIM(xmlValue.value('/values[1]/value[2]','nvarchar(100)'))) AS Location
    , LTRIM(RTRIM(xmlValue.value('/values[1]/value[3]','nvarchar(20)'))) AS Lon
    , LTRIM(RTRIM(xmlValue.value('/values[1]/value[4]','nvarchar(20)'))) AS Lat
    , GEOGRAPHY::STPointFromText('POINT(' + xmlValue.value('/values[1]/value[4]','nvarchar(20)') + ' ' + xmlValue.value('/values[1]/value[3]','nvarchar(20)') + ')', 4326)
FROM dbo.SplitString((SELECT Document.* FROM OPENROWSET(BULK N'C:\Temp\test.csv', SINGLE_CLOB) AS Document), CHAR(10)) AS T
CROSS APPLY (SELECT CAST('<values><value>' + REPLACE(T.Value, '|', '</value><value>') + '</value></values>' AS XML)) AS T1(xmlValue);
CREATE TABLE [dbo].[Landmark] (
    [ID]                INT IDENTITY(1, 1),
    [LandmarkName]      VARCHAR(100),
    [Location]          VARCHAR(50),
    [GeoLocation]       GEOGRAPHY
)
GO

INSERT INTO dbo.Landmark (LandmarkName, Location, GeoLocation)
SELECT LTRIM(RTRIM(xmlValue.value('/values[1]/value[1]','nvarchar(100)'))) AS LandmarkName
    , LTRIM(RTRIM(xmlValue.value('/values[1]/value[2]','nvarchar(100)'))) AS Location
    , GEOGRAPHY::STPointFromText('POINT(' + xmlValue.value('/values[1]/value[4]','nvarchar(20)') + ' ' + xmlValue.value('/values[1]/value[3]','nvarchar(20)') + ')', 4326)
FROM dbo.SplitString((SELECT Document.* FROM OPENROWSET(BULK N'C:\Temp\test.csv', SINGLE_CLOB) AS Document), CHAR(10)) AS T
CROSS APPLY (SELECT CAST('<values><value>' + REPLACE(T.Value, '|', '</value><value>') + '</value></values>' AS XML)) AS T1(xmlValue)
 类似资料:
  • 想要知道更多东西吗?当你需要从表中查找某些值时,可以使用冗长的 case 语句或 selectors 实现,但更整洁的方式是使用 extlookup 函数实现。 在 puppetmaster 上可以使用 extlookup 函数查询外部的 CSV 文件,并返回匹配的数据片段。 将所有数据组织到一个单一的文件并将它从 Puppet 配置清单中分离出来, 可以使维护工作变得更简单,也便于与其他人分享:

  • 本文向大家介绍如何在R中从Github导入CSV文件数据?,包括了如何在R中从Github导入CSV文件数据?的使用技巧和注意事项,需要的朋友参考一下 如果您在Github上有一个csv文件,则可以通过使用其URL直接将其导入R中,但是请确保在存储数据的Github页面上单击Raw选项。许多人没有单击Raw选项,因此他们阅读HTML而不是CSV并感到困惑。在这里,我正在共享一个包含数据集列表的公共

  • 我试图从csv文件导入数据。但它不起作用。有人能帮我吗? 我的简历文件: 用户名、密码usr1、pswd1 usr2、pswd2、usr3、pswd 3。。。。。 我的CSV数据集配置: 文件名:D:\Jmeter\Data\Login。csv变量名称:用户名、密码是否允许引用数据?:EOF上的真正回收?:错误EOF?上的停止线程:真的 但在请求正文中,用户名和密码没有反映出来 POST 数据:

  • 问题内容: 我有以下结构的csv文件: 使用以下MySQL函数如何导入MySQL表的第一和第三列: 我为我的英语道歉! 提前致谢 ! 问题答案: 您可以指定列,并将不需要的列标记为“ @dummy”。 替换,并且只要你喜欢。要设置不在数据文件中的其他列,您可以这样做: 作为进一步的参考,我建议您看一下MySQL参考。

  • 问题内容: 我有一些要导入mySQL的CSV数据文件。我想在shell脚本中进行插入,以便可以将其自动化。但是,我对在脚本中使用明文形式输入用户名和密码感到有些厌倦 我有以下问题: 我对脚本中明文中的uname / pwd的想法感到不满意(反正还是这样,还是我太偏执)?也许我可以为插入表设置仅具有INSERT特权的用户? 数据库表(导入原始数据的数据库表)具有基于表列的唯一键。我尝试导入的数据中也

  • 问题内容: 将CSV文件读入pandas DataFrame的Python方法是什么(然后我可以将其用于统计操作,可以具有不同类型的列等)? 我的CSV文件具有以下内容: 在R中,我们将使用以下命令读取此文件: 这将返回R data.frame: 有没有Python的方法来获得相同的功能? 问题答案: 救援熊猫: 这会返回与相似的pandas DataFrame。