0

나는이 주제에 대해 잠시 동안 연구를 해왔으며 유사한 인스턴스를 찾을 수없는 것 같습니다. 내 문제. 내가 할 수있는 한 최선을 다해서 모든 것을 설명하려고 노력할 것입니다.Access 데이터베이스의 정규화되지 않은 데이터를 SQL Server 데이터베이스의 정규화 된 폼으로 마이그레이션하는 가장 효율적인 방법

문제는 제목에 있습니다. Access 데이터베이스에서 SQL Server로 데이터를 마이그레이션하려고합니다. 일반적으로 SQL Server 내에 여러 가져 오기/내보내기 도구가 있기 때문에 실제로는 어려운 문제는 아니지만 최상의 솔루션을 찾고 있습니다. 데이터베이스 마이그레이션에 다소 새로운 조언이나 팁이 있습니다. 나는 이제 나의 상황을 설명하기 시작할 것이다.

현재 Access 데이터베이스에 존재하는 데이터를 마이그레이션하는 중입니다. 데이터베이스가 아닌 것 같기 때문에 따옴표 안에 데이터베이스가 있습니다. 이유는 1 분 안에 알 수 있습니다. 형태. 정규화되지 않았다는 것은 모든 데이터가 하나의 테이블에 있다는 것입니다. 이 표에는 약 150 개 이상의 열과 행 번호가 수천 개 있습니다. Yikes, 알아. 이것은 제가 롤에 들어간 것입니다. 어쨌든, 앉아서 모든 것을 정리하면서 새로운 가정 인 SQL Server에서 데이터를 정상적으로 정규화하는 관계를 설계했습니다. 내 곤경 (또는 적어도 그것의 일부)을 입력하십시오. 정규화 된 데이터베이스를 데이터를 보유하도록 설정했지만 가져 오기, 마사지/잘라내어 각각의 테이블에 배치하는 방법을 모르겠습니다.

지금까지 수행 할 수있는 작업에 대한 조사를 여러 차례 수행했으며 SQL Server 마이그레이션 지원에 대해 알아 냈습니다. 나는 그것을 망치기 시작했고 Access에서 SQL Server로 데이터를 가져올 수 있었지만 원하는 방식으로는 가져올 수 없었습니다. 나는 Access 데이터베이스에있는 것과 똑같은 방식으로 데이터를 내 SQL Server 데이터베이스에 붙여 넣기 만하는 & 복사본을 얻었습니다. 그런 다음이 유형의 마이그레이션을 위해 전역 테이블/스테이징 영역을 설정하는 일반적인 방법에 대해 배웠지 만 TSQL 사용에 관해서는 초보자입니다. 내 질문의 핵심은 이것에 달려있다. 내 정규화 된 SQL Server 데이터베이스에 이미있는 올바른 테이블로 데이터를 보낼 수있는 SQL Server (가져 오기/내보내기 도구 또는 SSMA)의 기능이 있습니까? 또는 준비 영역으로 가져 와서 해독 할 스크립트를 작성하고 각각의 정규화 된 테이블에 데이터를 추출 하시겠습니까? 그것이 후자의 경우 누군가 TSQL이 이런 종류의 일을하는 것처럼 보이는지 몇 가지 팁/예제를 보여 주실 수 있습니까? 분명히 나는 ​​데이터를 공유하지 않는 사람의 정확한 스크립트를 기대할 수 없다. (나는 고객 데이터만큼이나 자유롭지 못하다.) 쿠키 커터 예제가 작동 할 것이다.

또한 미래의 데이터는 다양한 소스 (예 : 엑셀 등)에서 새 데이터베이스로 이동하므로 염두에 두어야 할 사항입니다. 데이터베이스에 데이터를 추가하려고 할 때마다 새로운 가져 오기, 정렬 및 저장 스크립트를 작성해야하는 새로운 문제를 만드는 것을 싫어합니다.

이 정보가 너무 복잡하지 않고 누군가 나를 기꺼이 도울 수 있기를 바랍니다. 나는 모든 조언/팁을 크게 감사 할 것입니다. 비슷한 일을하는 많은 사람들을 찾았 기 때문에 이것이 다른 사람들을 도울 것이라고 믿습니다. 또한 TSQL 전문가가 이러한 데이터 마이그레이션 스크립트의 예 및/또는 다른 사람들이 전에 사용하지 않았거나 기능/기능이 설명서에 적절히 설명되지 않은 방식으로 존재하는 도구를 사용하는 방법에 대한 설명을 제시 할 수 있습니다 .

+2

IMO 가장 좋은 옵션은 SQL Server에서 테이블을 가져 오는 것입니다. 그리고 TQL을 사용하면 데이터를 변환하고 분리 할 수있는 옵션이 더 많기 때문에 데이터를 수동으로 표준화 된 테이블로 이동합니다. 그 이유는 도구가 데이터를 "수정하는"방법을 알기가 매우 어려울 것이기 때문입니다.) –

답변

1

:

또한

, 미래의 데이터는 (같은 어쩌면 예를 들어 엑셀) 다양한 소스에서 새 데이터베이스로 올 것입니다 ...?

그게 SSIS의 목적입니다. SSIS 설정은 간단한 작업이 아니지만 로켓 과학이 아닙니다. SQL Server Management Studio에는 가져 오기/내보내기 마법사가있어서 사용하기 쉬운 SSIS 패키지 작성자입니다. 그렇게하면 시작할 수 있습니다. PowerShell과 같은 많은 대안이 있지만 SSIS는 가장 빠르고 쉬운 솔루션 인 IMO입니다. 특히 여러 소스의 데이터를 처리 할 때.

SSIS는 데이터 원본 (예 : Excel 및 Sharepoint)으로 Microsoft 제품과 잘 작동합니다.

SQL Server 저장 프로 시저를 통해 SQL Server와 인터페이스하는 MS Access 프런트 엔드를 만들 수도 있습니다. 그것은 대상 고객에 달려 있습니다. 이것은 설정하기 쉽습니다. 빠른 Google 검색은 많은 간단한 예제를 반환합니다. 실제로 20 년 이상 전에 SQL Server를 배운 방법입니다.

나 이미 내 표준화 된 SQL Server 데이터베이스에 존재하는 권리 테이블에 데이터를 보낼 수 있도록 SQL Server의 일부 기능이 있습니까?

예. 그렇게하지 마십시오. 당신이 말하는 것에 대해 그것은 좌절 할 것입니다.

이 아니면 내가 준비 영역으로 가져 스크립트 (들) 를 해부하고, 각각의 정규화 된 테이블에 데이터를 추출을 작성하려면 어떻게해야합니까?

이것은.

후자 인 경우 누군가가 이런 종류의 일을 수행하는 것처럼 보이는 의 팁/예를 보여줄 수 있습니까?

비정규 화 된 데이터를 다룰 때 좋은 스플리터가 중요합니다.여기 내 두 즐겨 찾기의 : SQL 서버 2016에서 DelimitedSplit8K

PatternSplitCM

당신도 빠르다 (그러나 문제가) split_string 있습니다.

또 하나는 좋은 NGrams 기능이 있어야합니다. 제가 게시 한 링크에는 기사 하단에 기능이 첨부되어 있습니다. 일부 문자열 정리 기능이 있습니다 here.

내가 게시 한 링크에는 좋은 예가 있습니다.

1

그래서 피부에 방법이 고양이의 꽤 많이 있습니다

L, 감사합니다. 나는 "Migration Assistant"에 관해 많이 알지 못하지만, 당신이하려는 일을 할 때 당신의 인생을 더 쉽게 만들어 줄지는 의심 스럽습니다.

나는 전체 테이블을 하나의 큰 스테이징 테이블에 덤프하고 SQL을 사용하여 필요로하는 곳을 조각 냈다.나는 당신이 TSQL에 대한 도움을 요청했음을 알고 있지만, 비정규 화 된 데이터가 무엇인지, 어떻게 다시 모양을 바꾸고 싶은지에 대한 아이디어가 없어도, 내가 할 수있는 모든 것은 일반적으로 SQL을 읽는 것이 좋습니다 (선택, 어디서, 그룹별로, 등).

SSIS에서도 작업을 수행 할 수 있지만 궁극적으로 사용하는 솔루션은 큰 비정규 화 데이터 세트를 정규화해야하는 방식에 따라 크게 달라집니다. SQL에서 이것을하는 IMHO는 보통 가장 쉬운 방법이지만, 다시 망치질을하면 모든 것이 못처럼 보입니다.

향후 프로세스를 교정하는 경우 Access 데이터를 가져 오는 방법이 Excel 데이터를 가져 오는 방법에 거의 영향을 미치지 않습니다. 반복적으로 통합해야하는 다양한 데이터 소스가 많은 경우 SSIS는 장기간에 걸쳐 많은 시간과 노력을 투자 할 좋은 선택 일 수 있습니다. 무엇과 상관없이 고유 한 데이터 소스의 데이터를 통합하는 데는 시간과 노력이 필요합니다. 뭘하든 추가 작업을해야합니다. 주어진 데이터 소스를 얼마나 자주 통합해야하는지, 그리고 원하는 형식으로 데이터를 마사지하는 데 얼마나 많은 노력이 필요한지 생각해보십시오. 이 첫 번째

2

언급 된 모든 접근 방식에 동의합니다. 하나의 준비 테이블 (SSIS 사용 가능)에 데이터를로드 한 다음 T-SQL (아마도 저장 프로 시저에 래핑 됨)을 사용하여 데이터를 파쇄합니다.

이것은 손으로 작성한 스크립트가 필요한 커스텀 작품입니다. 소스 및 대상 스키마가 모두 사용자 정의 스키마이기 때문에 이에 대한 자동화 도구가 없습니다. 따라서 매핑과 규칙을 모두 정의해야합니다. 아니요 SSIS는 마술처럼 그렇게하지 않습니다!

INSERT INTO TargetLookupTable1 (Field1,Field2,Field3) 
SELECT DISTINCT Field1,Field2,Field3 
FROM SourceStagingTable 
:

그것은 당신이 목표 스키마와 소스 및 대상 스키마 사이의 매핑을 가지고있는 것처럼 이미 첫 번째 단계는 쿼리 이런 종류의 '조회'테이블을로드하는 것입니다 예를 들어

을했다 소리

TargetLookupTable1에는 이미 ID 기본 키가 정의되어 있어야합니다 (자동 생성되므로 위의 쿼리에 언급되지 않음)

여기에 첫 번째 문제가 있습니다. 거의 확실하게 별개의 쿼리가 중복 된 잘못된 데이터 데이터 쓰레기 데이터를 제공합니다. 따라서 조회 테이블을로드하기 전에 데이터 정리를 수행해야합니다.

원본 시스템의 데이터를 직접 정리하는 것이 좋지만 사용하는 것이 얼마나 편하다고 생각하십니까?

다음 단계는 다음과 같습니다

지금 당신이 거래를로드해야합니다 .. 데이터를 가정하는 것은 모든 깨끗하고이 방법으로 다스 룩업 테이블을로드했지만 당신은 검색 키를 모르는 당신 단지 생성!

트릭은 당신이 다시 준비 테이블에 키를 쓸 수 조회 테이블을로드하면이

를 기록 스테이징 테이블이에 대해 빈 열을 사전에 포함하는 것입니다.이 쿼리는 조회를로드하는 데 사용되는 필드에 다시 일치하고, 준비 테이블 이제

UPDATE TGT 
SET MyNewLookupKey = NewLookupTable.MyKey 
FROM SourceStagingTable TGT 
INNER JOIN 
NewLookupTable 
ON TGT.Field1 = NewLookupTable.Field1 
AND TGT.Field2 = NewLookupTable.Field2 
AND TGT.Field3 = NewLookupTable.Field3 

에 다시 키를 기록 당신이에로드 할 수있는 올바른 조회 키를 보유하고 스테이징 테이블에 MyNewLookupKey라는 칼럼 당신의 트랜잭션 테이블

데이터의

지속적인 업로드 는 별도의 문제지만

(그들은 분명히 단계적으로되고 있지만, 그들은 SQL 서버에 프런트 엔드에 매우 편리합니다) 당신이 MS 액세스 데이터 프로젝트를 조사 할 수 있습니다

기억해야 할 것은 : 데이터에 모호한 것이 있다면, 예를 들어 충분하다, "이 행은 나의 차가 검은 색이다라고 말한다. 그러나이 열은 나의 차가 하얀"라고 말한다, 그리고 당신 (인간)은 그것을 "모호하게하기"위해 규칙을 생각해 낼 필요가있다. 자동으로 수행 할 수 없습니다.

0

나는 완전히 다른 견해를 가지고 있습니다. PBI 측에서는 데이터베이스 개발과 Microsoft의 Power BI를 모두 수행하기 때문에 많은 데이터가 Excel에서 들어 오기 때문에 정규화되지 않은 데이터가 많이 있습니다.

내 생각 엔 현재 Access에있는 것은 원래 Excel에서 시작된 것의 가져 오기였습니다.

Excel Power Query 및 PBI는 피벗 및 피벗 레이아웃으로의 변환을 제공합니다. 나는이 도구를 사용하여 그 일을 할 것입니다. 그런 다음 결과를 SQL로 임포트하십시오.