mssql
-
WGS84 좌표계를 이용하여 거리를 구하는 functionDatabase 2023. 6. 20. 21:55
MSSQL에서 두 좌표간의 거리를 구하는 function을 만들어 보았다. -- ============================================= --WGS84좌표계에서 두 좌표간의 거리 구하기 -- ============================================= alter FUNCTION [dbo].[WGS84_DISTANCE] ( @LAT1 decimal(38, 30), -- 위도 @LNG1 decimal(38, 30), -- 경도 @LAT2 decimal(38, 30), -- 타겟위도 @LNG2 decimal(38, 30) -- 타겟경도 ) RETURNS decimal(38, 30) AS BEGIN RETURN ( 6371.0 * acos(cos( radians( ..
-
ML.NET MSSQL 연동 [5]AI/ML.NET 2020. 12. 1. 18:04
ML.NET 을 건드린지 1주가 지났는데 아직 자동화 밖에 쓰질 못하겠다. 그래서 자동화로 생성된 코드들을 보기로 했다. 시나리오를 선택하고 환경 선택하고 데이터를 선택하고 학습을 하면 가장 정확도가 높은 알고리즘을 찾아준다. 학습시간이 길 수록 정확도가 높아지지만 적은 데이터를 무작정 길게 학습한다고해서 더욱더 좋아지지는 않는다. LightGbmRegression이 제일 높은 정확도를 가진것으로 결과가 나왔다. 이 상태로 코드에서 프로젝트추가를 하면 이렇게 코드가 추가되고 샘프로 코드가 주어진다. 그럼 생성된 프로젝트로 들어가보자. ConsoleApp에 들어가보면 ModelBuilder 클래스가 있다. 여기에서 학습시킨 후에 선택된 알고리즘 LightGbmRegression를 사용해서 모델을 생성하는 ..
-
MSSQL tempDBDatabase 2020. 11. 26. 13:24
행수가 좀 많은 테이블에 어쩔수 없이 left join을 걸어서 산출물을 만들어야 하는 일이 생겼다. AI관련 데이터 전처리를 하는데 5초당 쌓이는 테이블과 결과 테이블 사이에 매칭을 할 수 있는 값이 없어서 datetime별로 조건을 걸어서 범위로 검색을 해야했다. 좋지 않은 쿼리 문장이기도 하고 left join 을 거니까 하루치 데이터를 산출하는데 실행 계획에서 조단위가 아닌 경단위를 넘어서는 행스캔을 하게 되었다. 해당 DB 서버는 성능이 일반 데스크탑 수준이었고 1시간정도 돌리니 tempDB 용량 부족으로 쿼리가 멈춰버렸다. 설정을 살펴보니 tempDB의 위치가 C드라이브 인데 C에 공간이 없었던것이 이유다. 그래서 tempDB에 대하여 검색을 하기 시작하고 일단 임시방편으로 tempDB의 파일..
-
ML.NET MSSQL 연동 [4]AI/ML.NET 2020. 11. 24. 14:15
찾기가 너무 힘들어서 예제를 찾아보았다. 예제코드에 보기 좋게 설명을 달아 놓았다. 따로따로 보기가 너무 불편해서... 이렇게 보니 금방 이해가 된다. 문제는 파이프라인을 정의 하여 모델을 만들때 사용하는 부분에서 mlContext의 종속 메서드들의 정의가 필요할 것 같다. public MLContext (int? seed = default); 이렇게 정의 되는데 seed 값이 무엇을 의미하는지 알아야 할 것 같았다. MS-DOC에는 아래와 같이 설명되어 있다. seed값에 따라서 모델의 일관성유지가 된다는 소리 같은데 null을 보통 사용해도 상관없을 듯 싶다. 특별한 경우가 아니라면... 더보기 ML.NET 많은 작업은 무작위 데이터 셔플, 무작위 샘플링, 무작위 매개 변수 초기화, 무작위 순열, 무..
-
ML.NET MSSQL 연동 [3]AI/ML.NET 2020. 11. 23. 18:21
앞 포스트에 이어서 일단 간단하게 폼을 하나 만들고 입력, 출력 클래스를 만들어주고 public class Data { public float A { get; set; } public float Target { get; set; } } public class Prediction { [ColumnName("Target")] public float Target { get; set; } } 버튼에 이벤트를 주었다. private void button1_Click(object sender, EventArgs e) { try { //Import or create training data MLContext mlContext = new MLContext(); DatabaseLoader loader = mlContex..
-
ML .NET MSSQL 연동 [2]AI/ML.NET 2020. 11. 23. 17:07
데이터베이스에서 데이터를 가져와서 학습모델을 만들고자 할때 보통 ML예제를 보면 전부 File에서 가져오는 예제들이다. 데이터베이스를 바로 연동하고 그후 데이터 준비 및 알고리즘 선택은 같게 움직인다. 일단 데이터베이스 연동 부분만 추가 하도록 한다. string rootDir = Path.GetFullPath(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "../../../")); string dbFilePath = Path.Combine(rootDir, "Data", "DailyDemand.mdf"); string modelPath = Path.Combine(rootDir, "MLModel.zip"); var connectionString = $"Data..
-
ML.NET 사용 선형회귀분석 [1]AI/ML.NET 2020. 11. 20. 18:51
Viusal Studio 2019에 .NET Core 관련 설치를 하면 ME.NET Core가 같이 설치 된다. 프로젝트 생성후 추가에 Machine Learning 을 선택한다. 나에게 맞는 시나리오를 선택한다. 시나리오에 따라서 학습모델이 자동으로 선정된다. 각 시나리오에 대한 대략적인 설명이 되어 있으며 MS Doc에 조금 더 자세히 기술되어 있다. 별로 그렇게 자세하지는 않다. 아직은.... 앞서 공부한 선형회귀분석을 비교해 볼 것이므로 값 예측 시나리오를 선택하도록 하겠다. 값 예측 시나리오는 로컬ML이라고 되어 있다. 학습을 로컬에서 진행한다는 뜻이다. 로컬컴퓨터의 자원이 좋아야 학습속도가 빨라진다. 다음으로 데이터가 필요하다. 강화학습이 아니므로 머신러닝에서 데이터는 필수이다. 앞 포스트에서..
-
MSSQL 테이블 확인 TipDatabase 2020. 11. 12. 16:24
SP_DEPENDS'테이블명'--테이블종속성확인(type에서 어디에 사용되어 종속되는지 알수 있다) SP_HELPCONSTRAINT '테이블명'--테이블제약조건확인 SP_HELPINDEX'테이블명'--테이블인덱스확인 --테이블을 사용하는 프로시저 검색 SELECT * FROM sys.procedures WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%테이블명%' --테이블을 사용하는 트리거 검색 SELECT * FROM sys.triggers WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%테이블명%'
-
MSSQL MERGE 예제Database 2020. 11. 10. 17:24
MERGE 단일 문에서 여러 DML(INSERT, UPDATE, DELETE) 작업을 수행할 수 있다. 즉, 여러 개의 개별 DML문을 단일 문으로 대체할 수 있다. 작업이 하나의 문 내에서 수행되면서, 데이터가 처리되는 횟수가 최소화되고 쿼리 성능이 향상된다. MERGE 변경될테이블명 AS A USING (SELECT 컬럼명 FROM 기준테이블명) AS B ON (A.컬럼명 = B.컬럼명 AND A.컬럼명 = B.컬럼명) WHEN MATCHED AND 조건 THEN INSERT (A.컬럼명) VALUES(B.컬럼명) WHEN NOT MATCHED AND 조건 THEN UPDATE SET A.컬렴명 = B.컬럼명 WHEN NOT MATCHED AND 조건 THEN DELETE; 재귀쿼리에 MERGE 사용..