load matching files in table - sql-server

I have a folder that contains multiple .csv files for each employee like empname_date.csv and I want to load files in one table.
Not all files but only files where file name matches the data with tbl_empmaster table that contains the master list of employees.
I do not want to check each file because it will take too much of time. I need to filter files as per master list and then load the matching employee files.
Please help what I can do in this case.
I am using SSIS to do the same.

Create an SSIS Package to with a For Each Loop Container to Read all the CSV files of the given Folder.
Read the File Name without extension to a variable and Before inserting perform a table lookup to see whether the given File Name exists in your table and insert only if the match is found

Related

Query Staged files in Snowflake

I am interested in doing a bulk load to add loaded file name to a column in the target column. The file name contains the timestamp of the file created which helps us to identify the insert timestamp as a column.
I know I can do something like
COPY INTO MYTABLE(FILENAME,FILE_ROW_NUMBER,COL1,COL2)
FROM (SELECT METADATA$FILENAME,METADTA$FILE_ROW_NUMBER,T.$1,T.$2
FROM #MYSTAGE(FILE_FORMAT => MYFORMAT)T) ;
But this works for a single file. All the files do not follow the same pattern and hence I cannot use pattern option. I am looking for something similar like copy into where I can specify files
One option is to filter files but that does not seem like very efficient if I have many files. Looking for options and suggestions.

SSIS package to read multiple files and load into multiple tables based on file name

I am very new to SSIS and I have a requirement where I receive multiple text files each day to a folder location and I need to load each file to a different table, each file has a different file format that matches its corresponding target table. For ex: File1 has 5 fields, so Table1 also has exact same 5 fields. File2 has 8 fields, Table2 also has exact same 8 fields.
All files are received in the same folder location. File name pattern is Table1.YYYYMMDD.HHMMSS.txt (first file)
Table2.YYYYMMDD.HHMMSS.txt (`second file`)
Table3.YYYYMMDD.HHMMSS.txt (`third file`)
Table4.YYYYMMDD.HHMMSS.txt (`fourth file`)
My target table names are as follows: Table1, Table2, Table3, Table4
I need to load 'Table1.YYYYMMDD.HHMMSS.txt' into 'Table1' and similarly other files into their respective tables. After loading each file, I need to move the file to a different folder. I want to know if a for loop solution will solve this? If so how can I implement it?
I would have 4 - foreach containers each with a dataflow and a file system task.
set the folder appropriately and your file name contains the mask that you want.
i.e table1*.txt

Update filename of the extracted file in front of the records in a SQL table

I have a requirement on which I am getting no idea how to start with and request your assistance.
I have a SQL table which gets loaded via a Stored Procedure in SSIS. Once the table is loaded there are some checks which gets applied on the table and then it proceeds ahead with the file extraction.
The records from the table now flows into a single CSV file.
There is a condition that the file can have only 100K records, hence I split the files and a suffix gets added to the file name. For example, if XYZ is the file name, then based on records count the file splits into XYZ_1.csv, XYZ_2.csv, XYZ_3.csv.
The task is I need to update the filename in front of the records in the table, which means if file XYZ_1.csv has rows from ID 1 to 100 then I must get the filename in front of those records as XYZ_1.csv and so on for the next.
Any suggestions on how to proceed with this?
Thanks.

Enumerating sub-folders and saving the records from flat file to SQL

I've a root folder which contains few CoNum folder and they contain CycleDate folder, every CycleDate folder contain a file named N718010.txt which contains comma separated records whom I want to insert into SQL database table. How can I achieve the same? I'm a beginner in the SSIS world.
I followed this url- http://microsoft-ssis.blogspot.in/2011/01/foreach-folder-enumerator.html
but it is incomplete and this ended up getting the path in a variable (xmldoc) like:
How can I get these records saved to the SQL database table? Note: I also have to save CoNum and CycleDate to the table with each record.
What you need to do, is just to use a simple Foreach Loop Container
You can read about a very basic method here
To get CoNum and CycleDate, you can just substring your FullPath variable in a derived column.

Identifying duplicate files based on data content in SSIS

I get files to a shared location . Every file has different meta ie. file name, date created.
I have to extract the data using SSIS if and only if file content is different than previously processed files.
This should be fairly straight-forward -
Use a ForEach container configured to For Each File setting. Folder name would be the shared location. File Name should be a wildcard (example, *.csv)
Create a table in SQL called LoadedFiles which will hold the names of the files loaded. Note that when you create the ForEach container you would have also created a variable that would hold the file-name. Now in the ForEach container, check if the value in this variable exists already in the LoadedFiles table. If it doesn't, only then load.
I've assumed that all the files have the same metadata (column names and data types). Even if they do not, you can employ the same logic.
Also, if it isn't obvious, for this to work you need to insert a new row into the LoadedFiles table every time you do decide to load a file.
EDIT: It seems same file name does not equate to same content for the OP. In that case, he should just do a MERGE on the SQL table instead of a blind insert.
MERGE on the primary key and IF MATCHED do nothing else INSERT
I got work around
SSIS execute process task and i have called FC.exe
http://www.howtogeek.com/206123/how-to-use-fc-file-compare-from-the-windows-command-prompt/

Resources